ネイティブ JS を使用してタッチスライド監視イベントを実装する方法

ネイティブ JS を使用してタッチスライド監視イベントを実装する方法

序文

今日はちょっとしたデモを書きました。左右にスワイプするロジックに関わる部分があります。当初はプラグインを使いたかったのですが、長い間ネイティブ JS を使ってスライディング モニタリングを書いていなかったことを思い出し、ネイティブ JS で実装してみました。結局、古いものを復習することで新しいことを学ぶことができ、同時に記録を残すこともできます。まず達成した効果を投稿します:

概念

スムーズなタッチ スライド イベント リスナーを作成するには、次の 3 つのロジックの側面を考慮する必要があります。

  • 距離: スライド距離は40以上である必要があります
  • 時間: スライド時間は 0.5 秒未満、つまり、指を押してドラッグし、500 ミリ秒以内に離します (画面に触れるだけでトリガーされないようにする)
  • スライド方向:
    • 左右にスライドする条件は、X 軸の移動距離が Y 軸の移動距離より大きいことです。正の場合は左に移動し、負の場合は右に移動します。
    • 上下にスライドする条件は、Y軸の移動距離がX軸の移動距離より大きいことです。正であれば上に移動し、負であれば下に移動します。

基本的な考え方があれば、この考え方に従ってコードを完成させることができます〜

リスニングイベント

タッチスライドを監視する場合、次の 3 つのタッチ イベントが自然に使用されます。

1. タッチスタート 指で画面をクリックしたときにトリガーされるタッチスタート(マルチタッチを監視でき、次の指もトリガーされます)

2. タッチムーブ スライドすると接触点が変化し、継続的にトリガーされます

3. touchend 指が画面から離れるとタッチが終了します

これら 3 つのタッチ イベントにはそれぞれ 3 つのタッチ オブジェクト リストが含まれます (タッチ ポイントに基づいてマルチタッチを実装できます)。

1. タッチ: 現在の画面上のすべての指のタッチポイントのリスト

2. targetTouches: 現在のDOM要素上の指のリスト

3. changedTouches: 現在のイベントの指のリスト

同時に、各タッチ オブジェクト Touch には次のプロパティが含まれます。

- 識別子: タッチを識別する一意のID

- pageX: ページ上のタッチポイントのX座標

- pageY: ページ上のタッチポイントのy座標

- screenX: 画面上のタッチポイントのX座標

- screenY: 画面上のタッチポイントのy座標

- clientX: ビューポート内のタッチポイントのX座標

- clientY: ビューポート内のタッチポイントのy座標

- ターゲット: タッチされたDOMノード

コードの実装

上記のアイデアとタッチイベントの基礎があれば、簡単にコードを書くことができます〜

let box = document.querySelector('body') // リスナー オブジェクト let startTime = '' // タッチ開始時間 let startDistanceX = '' // タッチ開始 X 軸位置 let startDistanceY = '' // タッチ開始 Y 軸位置 let endTime = '' // タッチ終了時間 let endDistanceX = '' // タッチ終了 X 軸位置 let endDistanceY = '' // タッチ終了 Y 軸位置 let moveTime = '' // タッチ時間 let moveDistanceX = '' // タッチ移動 X 軸距離 let moveDistanceY = '' // タッチ移動 Y 軸距離 box.addEventListener("touchstart", (e) => {
    startTime = 新しいDate().getTime()
    開始距離X = e.touches[0].screenX
    開始距離Y = e.touches[0].screenY
})
box.addEventListener("touchend", (e) => {
    endTime = 新しいDate().getTime()
    終了距離X = e.changedTouches[0].screenX
    終了距離Y = e.changedTouches[0].screenY
    移動時間 = 終了時間 - 開始時間
    移動距離X = 開始距離X - 終了距離X
    移動距離Y = 開始距離Y - 終了距離Y
    console.log(移動距離X、移動距離Y)
    // スライド距離が 40 を超え、時間が 500 ミリ秒未満かどうかを判断します if ((Math.abs(moveDistanceX) > 40 || Math.abs(moveDistanceY) > 40) && moveTime < 500) {
        // X軸上の移動距離がY軸上の移動距離より大きいかどうかを判定します。if (Math.abs(moveDistanceX) > Math.abs(moveDistanceY)) {
        // 左と右 console.log(moveDistanceX > 0 ? 'left' : 'right')
        } それ以外 {
        // 上下 console.log(moveDistanceY > 0 ? 'up' : 'down')
        }
    }
})

実行して確認してみましょう:

タッチ時間は 500 ミリ秒を超えるとトリガーされず、スライド距離は 40 未満の場合はトリガーされないことがわかります。角度付きスライドの場合は、XY 軸上の最長移動距離が優先されます。完璧に達成しました!

追記

フロントエンドフレームワークは急速に発展しており、多くの人はフレームワークを直接学習するプレッシャーがないため、ネイティブ JS の学習にあまり注意を払っていません。しかし、物事がどのように変化しても、本質は変わりません。フレームワークの利点は、その設計アイデアとパターンにあります。深く理解したいのであれば、やはりネイティブ JS を基礎として持つ必要があります。さらに先へ進みたいのであれば、やはりしっかりとした基礎を築く必要があります。結局のところ、高い建物は地面から始まりますよね?

ネイティブ JS を使用してタッチ スライド監視イベントを実装する方法についての記事はこれで終わりです。より関連性の高い JS タッチ スライド監視イベント コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JavaScript WebAPI、DOM、イベント、操作要素例の詳しい説明
  • JavaScript におけるイベント バブリング メカニズムの詳細な分析
  • jsのイベントループ機構の解析
  • JSブラウザイベントモデルの詳細な説明
  • JS と Nodejs におけるイベント駆動型開発についての簡単な説明
  • Vue.js フロントエンドフレームワークにおけるイベント処理の概要
  • 一般的なイベントを処理するための JavaScript の使用に関する詳細な説明
  • JavaScript イベント ループのケース スタディ

<<:  Linux の sudo 脆弱性により不正な特権アクセスが発生する可能性がある

>>:  MySQLの水平および垂直テーブルパーティションの説明

推薦する

Visual Studio Code + Reactをベースに開発環境を構築するプロセス

開発環境ウィンドウ開発ツール Visual Studio Codeノードのインストールとnpm Wi...

JSはリクエストディスパッチャーを実装する

目次抽象化と再利用シリアルセグメントシリアル、セグメントパラレル要約するはじめに: JS は当然並列...

表のセル間隔とセルパディングの違いの詳細な説明

テーブルとは何ですか?セルセルで構成されています。表では、<td> の数は、<tr...

Mybatis ファジークエリ実装方法

Mybatis ファジークエリ実装方法mybatis のリバース アシスタントは非常に使いやすく、通...

Mac M1 での Nginx のマルチサイト構成の実装

注: nginxはbrew経由でインストールされますウェブサイトのルートディレクトリ: /opt/h...

Linux での Docker と portainer の設定方法

1.Docer CEをインストールして使用するこの記事では、CentOS 7 を例に Docker ...

VMWare を使用して Windows 上で Linux 環境を構築する手順 (画像とテキスト)

Mac を返却して以来、元のラップトップは使用されていません。このラップトップの構成は非常に良好で...

この記事は、Dockerにおけるcgroupの具体的な使用法を徹底的に理解するのに役立ちます。

目次cgroupとはcgroupの構成cgroupが提供する機能cgroup 内の CPU を制限す...

divの背景を透明に設定する方法の例

div の背景を透明にする一般的な方法は 2 つあります。 1. 不透明度属性を 0 ~ 1 の値に...

HTMLでは、全体的なスタイルとレイアウトを崩さずに、部分的に強制スクロールバーを使用できます。

まずはエフェクト画像を投稿します:全体的なスタイルとレイアウトが崩れないように、スクロール バーがロ...

JavaScript を使用してカルーセル効果を実装する

この記事では、カルーセルマップの特殊効果を実現するためのJavaScriptの具体的なコードを参考ま...

Vue3のレスポンシブ原則の詳細な説明

目次Vue2 レスポンシブ原則のレビューVue3 レスポンシブ原則の分析ネストされたオブジェクトの応...

Tencent Cloud 上で Hadoop 3.x 疑似クラスターを構築する方法を説明します

1. 環境整備CentOS Linux リリース 7.5.1804 (コア)インストールフォルダを作...

要素ツリーコントロールは、ドロップダウンメニューとアイコンを統合します(ツリー+ドロップダウン+入力)

目次要件:実装手順:この記事では主に以下について説明します: カスタムツリーコントロール<el...

Dockerコンテナを介してランプアーキテクチャを構築するプロセス

目次1. Centosイメージを取得する2. nginxイメージをビルドする3. MySQLイメージ...