ホームページ  >  記事  >  ウェブフロントエンド  >  javascript_javascript スキルの Touch イベントに関する簡単な説明

javascript_javascript スキルの Touch イベントに関する簡単な説明

WBOY
WBOYオリジナル
2016-05-16 15:37:551583ブラウズ

js touch イベント。一般にモバイル端末のタッチ スクリーンのスライドに使用されます

コードをコピー コードは次のとおりです。
$(function(){document.addEventListener("touchmove ", _touch , false);}) function _touch(event){alert(1);}

touchstart: 指が画面に触れるとトリガーされ、すでに画面上に指がある場合でもトリガーされます。
touchmove: 指が画面上をスライドすると継続的にトリガーされます。このイベント中に、preventDefault() を呼び出すとスクロールが防止されます。
touchend: 指が画面から離れるとトリガーされます。
touchcancel: システムがタッチの追跡を停止したときに発生します。このイベントの正確なトリガーイベントはドキュメントでは明確ではありません。

上記のイベントのイベント オブジェクトはすべて次の属性を持ちます:

touches: 現在追跡されているタッチ操作を表す Touch オブジェクトの配列。
targetTouches: イベント ターゲットに固有の Touch オブジェクトの配列。
changeTouches: 最後のタッチ以降に何が変更されたかを表す Touch オブジェクトの配列。

各 Touch オブジェクトには次のプロパティが含まれます:

clientX: ビューポート内のタッチ ターゲットの X 座標。
clientY: ビューポート内のタッチ ターゲットの Y 座標。
識別子: タッチの一意の ID を表します。
pageX: ページ内のタッチ ターゲットの x 座標。
pageY: ページ内のタッチターゲットのy座標。
screenX: 画面上のタッチターゲットのx座標。
screenY: 画面上のタッチターゲットのy座標。
target: タッチされた DOM ノード座標

タッチイベント

仕様に記載されており、モバイル デバイス全体に広く実装されている 3 つの基本的なタッチ イベント:
1. touchstart: DOM 要素に指を置きます。
2. touchmove: DOM 要素を指でドラッグします。
3. touchend: DOM 要素から指を遠ざけます。

各タッチ イベントには 3 つのタッチ リストが含まれます:
1. タッチ: 現在画面上にあるすべての指のリスト。
2. targetTouches: 現在の DOM 要素上にある指のリスト。
3.ChangeTouches: 現在のイベントに関係する指のリスト

たとえば、タッチエンド イベントでは、これは削除された指になります。

これらのリストは、タッチ情報を含むオブジェクトで構成されます:
1. 識別子: タッチ セッション内の現在の指を一意に識別する数値。
2. target: アクションのターゲットである DOM 要素。
3. クライアント/ページ/画面座標: アクションが発生する画面上の位置。
4. 半径座標と回転角度: 指の形にほぼ等しい楕円を描きます。

タッチ対応アプリケーション

touchstart、touchmove、および touchend イベントは、ピンチしてズーム、回転、待機するなどの一般的なマルチタッチ ジェスチャを含む、ほぼすべてのタイプのタッチベースの操作をサポートするのに十分な豊富な機能セットを提供します。次のコードを使用すると、1 本指のタッチを使用して DOM 要素をドラッグできます:

 var obj = document.getElementByIdx_x_x_x_x_x_x('id');
 obj.addEventListener('touchmove', function(event) 
 { // 如果这个元素的位置内只有一个手指的话
    if (event.targetTouches.length == 1) 
 {
  var touch = event.targetTouches[0];
   // 把元素放在手指所在的位置
   obj.style.left = touch.pageX + 'px';
     obj.style.top = touch.pageY + 'px';
  }
}, false);

以下は、画面上の現在のすべてのタッチ ポイントを表示する例です。その目的は、デバイスの応答性を感じることです。

   // 设置画布并通过ctx变量来暴露上下文复制代码
 canvas.addEventListener('touchmove',   
 function(event) {
    for (var i = 0; i < event.touches.length; i++) {
 var touch = event.touches;
  ctx.beginPath();
    ctx.arc(touch.pageX, touch.pageY, 20, 0, 2*Math.PI, true);
    ctx.fill();
    ctx.stroke();
   }
  }, false);

デモ

Paul Irish らによるこのキャンバスベースのペイント デモのように、興味深いマルチタッチ デモがたくさんあります。

CSS3 トランジション、トランジション、キャンバスを使用する Fruit Ninja クローンである Browser Ninja の技術デモもあります。

ベストプラクティス

ブロックズーム

デフォルトのマルチタッチ設定は、スワイプやジェスチャーがスクロールやズームなどのブラウザーの動作に関連付けられていることが多いため、特に使いやすいわけではありません。

スケーリングを無効にするには、次のメタ タグを使用してビューポートを設定し、ユーザーがスケーリングできないようにします:
Content="width=デバイス幅、initial-scale=1.0、user-scalable=no">
表示領域設定の詳細については、モバイル HTML 5 に関するこの記事をご覧ください。

スクロールを防止します

一部のモバイル デバイスには、従来の iOS オーバースクロール効果などのデフォルトのタッチムーブ動作があり、スクロールがコンテンツの制限を超えるとビューがバウンスします。このやり方は多くのマルチタッチ アプリケーションで混乱を引き起こしますが、これを無効にするのは簡単です。

   document.body.addEventListener('touchmove', function(event) {
    event.preventDefault();
   }, false); 

细心渲染

     如果你正在编写的多点触控应用涉及了复杂的多指手势的话,要小心地考虑如何响应触摸事件,因为一次要处理这么多的事情。考虑一下前面一节中的在屏幕上画出所有触点的例子,你可以在有触摸输入的时候就立刻进行绘制:

  canvas.addEventListener('touchmove', function(event) {
   renderTouches(event.touches);
  },

    不过这一技术并不是要随着屏幕上的手指个数的增多而扩充,替代做法是,可以跟踪所有的手指,然后在一个循环中做渲染,这样可获得更好的性能:

  var touches = []
  canvas.addEventListener('touchmove', function(event) {
    touches = event.touches;
  }, false);
  // 设置一个每秒60帧的定时器
  timer = setInterval(function() {
   renderTouches(touches);
  }, 15);

     提示:setInterval不太适合于动画,因为它没有考虑到浏览器自己的渲染循环。现代的桌面浏览器提供了requestAnimationFrame这一函数,基于性能和电池工作时间原因,这是一个更好的选择。一但浏览器提供了对该函数的支持,那将是首选的处理事情的方式。

使用targetTouches和changedTouches
    要记住的一点是,event.touches是与屏幕接触的所有手指的一个数组,而不仅是位于目标DOM元素上的那些。你可能会发现使用 event.targetTouches和event.changedTouches来代替event.touches更有用一些。

    最后一点,因为你是在为移动设备做开发,因此你应该要留心移动的最佳做法,这些在Eric Bidelman的文章中有论及,以及要了解这一W3C文档。

设备支持     

    遗憾的是,触摸事件的实现在完备性和质量方面的差别很大。我编写了一个诊断脚本来显示一些关于触摸API实现的基本信息,其中包括哪些事件是支持的,以及 touchmove事件触发的解决方案。我在Nexus One和Nexus S硬件上测试了Android2.3.3,在Xoom上测试了Android 3.0.1,以及在iPad和iPhone上测试了iOS 4.2。

    简而言之,所有被测试的浏览器都支持touchstart、touchend和touchmove事件。

    规范提供了额外的三个触摸事件,但被测试的浏览器没有支持它们:
      1. touchenter:移动的手指进入一个DOM元素。
      2. toucheleave:移动手指离开一个DOM元素。
      3. touchcancel:触摸被中断(实现规范)。

     被测试的浏览器还在每个触摸列表内部都提供了touches、targetTouches和changedTouches列表。不过,被测试的浏览器没有支持radiusX、radiusY或是rotationAngle属性,这些属性指明触摸屏幕的手指的形状。在一次touchmove期间,事件大约一秒钟触发60次,所有的被测试设备都是这样。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。