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 サーバーのグラフィック カードのクラッシュの解決策

推薦する

React は antd のアップロード コンポーネントを使用してファイル フォーム送信機能を実装します (完全なコード)

私はプロジェクトを実行するために react を使い始めたばかりで、非常に未熟で完全な初心者です。私...

MySQLでトランザクションを開始する方法

序文この記事では主にMySQLでトランザクションを開始する方法について紹介します。関連情報については...

nginx を介して方向プロキシを実装するプロセスの図

この記事は主に、nginx を介して方向プロキシを実装するプロセスを紹介します。この記事のサンプル ...

カンマで区切られたmysqlの分割関数の実装

1: 文字列を区切るためのストアドプロシージャを定義する 区切り文字 $$ `mess`$$ を使う...

Vue で変数式セレクターを実装する方法

目次HTML構造の定義入力タグのバインディング属性入力タグはキーダウンイベントをリッスンしますli ...

MySQLカスタム関数の原理と使用法の分析

この記事では、例を使用して MySQL カスタム関数の原理と使用方法を説明します。ご参考までに、詳細...

Vue3ルーティングVueRouter4を使用する簡単な例

ルーティングvue-router4 では API の大部分は変更されていないため、変更点のみに焦点を...

CenOS6.7 mysql 8.0.22 のインストールと設定方法のグラフィックチュートリアル

CenOS6.7 は MySQL8.0.22 (推奨コレクション) をインストールします1. MyS...

各グループの最新データを取得するためにMySQLベースのグループを実装する

序文:グループ化関数はグループ内の最初のデータを取得しますが、各グループ内の最新のデータを取得する必...

CSS3 すりガラス効果

すりガラス効果がうまく表現されていれば、ページが非常に鮮やかで立体的に見えるようになります。写真に直...

Vue が Ref を使用してレベル間でコンポーネントを取得する手順

VueはRefを使用してレベル間でコンポーネントインスタンスを取得します例の紹介開発プロセスでは、レ...

vue-element-adminフレームワークを使用して、バックエンドからメニュー機能を動的に取得します。

目次2. 詳しい説明2.1. asyncRoutesルーティングを追加する2.2. 新しいpermi...

ハイパーリンクアイコンの仕様: 記事の読みやすさを向上

1. ハイパーリンクアイコンの仕様とは?<br />ハイパーリンクアイコンの仕様は、「C...

MySQL マスタースレーブステータスチェックの実装

1. AデータベースとBデータベースの同期ステータスを確認する次のコマンドを入力すると多くの情報が表...

HTML と CSS の命名規則の概要

CSS命名規則 ヘッダー: ヘッダーコンテンツ: コンテンツ/含むフッターナビゲーション: navサ...