Vueはボールのスライディングクロス効果を実現します

Vueはボールのスライディングクロス効果を実現します

この記事の例では、ボールのスライドとクロスの効果を実現するためのVueの具体的なコードを共有しています。具体的な内容は次のとおりです。

では、早速コードを見てみましょう。

<テンプレート>
  <div class="about">
    <div class="box">
      <!-- デフォルト行 -->
      <div class="Line"></div>
      <!-- 青い線 -->
      <div class="スライダーライン" ref="スライダーライン"></div>
      <!-- 左側の小さなボール -->
      <div class="ball" @touchstart.prevent="fnstart"></div>
      <!-- 右ボール-->
      <div class="ball ac" @touchstart.prevent="fnstart"></div>
      <!-- 上記の数字 -->
      <div class="num" ref="num">{{ num }}</div>
    </div>
  </div>
</テンプレート>

スクリプトコード:

<スクリプト>
エクスポートデフォルト{
  データ() {
    戻る {
      番号: 0,
    };
  },
  メソッド: {
    fnstart(ev) {
      //ボール this.oDiv = ev.target;
      // pagx: マウスのクリック位置からページの左端までの距離 offsetLeft 現在の要素の左端から最大ボックスの左端までの距離 this.pageX = ev.changedTouches[0].pageX - this.oDiv.offsetLeft;
 
      document.ontouchmove = this.FnMove;
      document.ontouchend = this.FnEnd;
      //親要素の幅 this.parent = ev.target.parentNode.offsetWidth;
      // ボールの幅を減算します this.Width = this.parent - ev.target.offsetWidth;
      //親要素を取得します。this.parents = ev.target.parentNode;
      //子要素を取得します。this.child = this.parents.children;
 
      // 右側のボールを取得します this.Right = this.parents.children[0];
      // 左側のボール this.Left = this.parents.children[1];
    },
    FnMove(ev) {
      // ボールが要素の左端からスライドする距離を減算して、ブラウザの端を計算します。this.X = ev.changedTouches[0].pageX - this.pageX;
      // コンソールログ(this.X, 1010101);
 
      // ボールがゼロで外に出られないかどうかを確認します if (this.X <= 0) {
        this.X = 0;
      }
      // ボールが外に出ないように、これより大きいか等しいかをチェックします。if (this.X > this.Width) {
        this.X = this.Width;
      }
      // 左側のボールをスライドさせると、それに応じて線の色が変わります // 上記の値もそれに応じて変化し、100 の部分に分割されます this.xnum = this.X / 3.7;
      // 整数を取得 this.num = parseInt(this.xnum);
      this.$refs["num"].style.left = this.X + 6 + "px";
 
 
      // ボールが互いに影響を及ぼさずに交差するようにします // 左右を動的に監視します for (var i = 0; i < this.child.length; i++) {
        if (this.child[i].classList.contains("ball")) {
          // 合計 5 つの要素から 3 を引いたものが青い線の長さです
          Len = this.child.length - 3 とします。
          (i == 長さ) の場合 {
            // 左のボールの絶対値から右のボールを引いた値が線の幅です。 this.dis = Math.abs( this.child[i].offsetLeft - this.child[i + 1].offsetLeft );
            //ボールの幅 this.child[1].style.width = this.dis + "px";
 
            // 左のボールの値から右のボールの値を引いた値が 0 未満の場合、青い線の左側が左のボールの offsetLeft 値になります if (this.child[i].offsetLeft - this.child[i + 1].offsetLeft < 0) {
              this.child[1].style.left = this.child[i].offsetLeft + "px";
            } それ以外 {
              // それ以外の場合は、右側のボールの offsetLeft 値です。this.child[1].style.left = this.child[i + 1].offsetLeft + "px";
            }
          }
        }
      }
 
 
      this.oDiv.style.left = this.X + "px";
    },
    FnEnd() {
      document.ontouchmove = null;
      document.ontouchend = null;
    },
  },
};
</スクリプト>

CSSコード:

<style lang="less" スコープ>
。箱 {
  位置: 相対的;
  幅: 400ピクセル;
  高さ: 30px;
  背景色: rgb(240, 16, 83);
  上: 50px;
  マージン: 自動;
  。ボール {
    位置: 絶対;
    幅: 30ピクセル;
    高さ: 30px;
    背景色: ピンク;
    境界線の半径: 50%;
    zインデックス: 2;
  }
  .ball.ac {
    右: 0;
    背景色: 紫;
  }
  。ライン {
    位置: 絶対;
    上: 14px;
    幅: 400ピクセル;
    高さ: 2px;
    行の高さ: 30px;
    背景: #ccc;
  }
  .スライダーライン{
    位置: 絶対;
    上: 14px;
    幅: 400ピクセル;
    高さ: 2px;
    行の高さ: 30px;
    背景色: 青;
  }
  .nu​​m {
    位置: 絶対;
    上: -19px;
    左: 9px;
  }
}
</スタイル>

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vueでモバイル端末上で左右スライド効果を実現する方法
  • Vue カスタム モバイル タッチ イベント: クリック、スライド、長押しイベント
  • Vueをベースにページ切り替えの左右スライド効果を実装する
  • vue2.0 モバイル スライド イベント vue-touch のサンプル コード
  • Vue で画面のスクロールとスライドを無効にする
  • Vue は、より多くのエフェクトを読み込むために下にスライドすることを実装しました。
  • Vueモバイル端末での左右スライドイベントの詳しい説明
  • Vue で better-scroll を使用してスライド効果を実現する方法と注意事項
  • Vue はページ切り替えスライド効果を実装します
  • Vueモバイル端末は携帯電話を左右にスライドして入力するアニメーションを実現

<<:  Linux サーバー上で nvidia-docker 環境を設定するプロセスの詳細な説明

>>:  Linux サーバーのグラフィック カードのクラッシュの解決策

推薦する

MySQLの共有ロックと排他ロックの使用例の分析

この記事では、例を使用して MySQL の共有ロックと排他ロックの使用方法を説明します。ご参考までに...

MySql 8.0.11 のインストールと設定のチュートリアル

公式ウェブサイトアドレス: https://dev.mysql.com/downloads/mysq...

Linux CentOS でスクリプトを定期的に実行するように設定する方法

多くの場合、サーバーでスクリプトを定期的に実行して操作をトリガーする必要があります。たとえば、Qin...

CentOS 7.5 が Varnish キャッシュサーバー機能を導入

1. ワニスの紹介Varnish は、高性能なオープンソースのリバースプロキシサーバーおよび HTT...

React+Koa によるファイルアップロードの実装例

目次背景サーバーの依存関係バックエンド構成クロスドメインバックエンド構成の静的リソースアクセスではk...

js オプション連鎖演算子の使用

序文オプションの連鎖演算子 (?.) を使用すると、チェーン内の各参照が有効であることを明示的に検証...

Vue 値転送の 12 の方法の概要

目次1. 父から息子へ2. 息子から父へ3. ブラザーコンポーネント通信(バス) 4. ref/re...

【HTML要素】タグテキストの詳細説明

1. 基本的なテキスト要素を使用してコンテンツをマークアップするまず表示効果を見てみましょう:対応す...

Vue3+TypeScriptは再帰メニューコンポーネントの完全な例を実装します

目次序文必要成し遂げる最初のレンダリングメニュー項目をクリックしますスタイルの区別デフォルトのハイラ...

MySQL インデックスのクイックガイド

MySQL インデックスの確立は、MySQL の効率的な操作にとって非常に重要です。インデックスによ...

完全バックアップとポイントインタイムバックアップにmysqldumpを使用する方法

Mysqldump は MySQL の論理バックアップに使用されます。高速ではありませんが、柔軟性が...

Linux で Nginx 1.16.0 をインストールするための詳細なチュートリアル

最近 Linux をいじっていたので、nginx の新しいバージョンをインストールしたいと思いました...

数百万のデータボリュームに対する MySQL ページングクエリ方法とその最適化の提案

データベース SQL の最適化はよくある問題です。何百万ものデータ ボリュームに対してページング ク...

ubuntu16.04でNFSサービスを構築する方法

NFS の紹介NFS (ネットワーク ファイル システム) は、FreeBSD でサポートされている...

Nginxサービス500:内部サーバーエラーの原因の1つ

500 (内部サーバー エラー) サーバーでエラーが発生したため、要求を完了できませんでした。 50...