ホームページ > ウェブフロントエンド > H5 チュートリアル > HTML5 タッチイベントの進化 タップイベントの紹介_html5 チュートリアル スキル

HTML5 タッチイベントの進化 タップイベントの紹介_html5 チュートリアル スキル

WBOY
リリース: 2016-05-16 15:45:25
オリジナル
2113 人が閲覧しました

タッチ イベントはモバイル ブラウザーに特有の HTML5 イベントです。クリック イベントは PC やモバイル端末でよく使用されますが、モバイル端末では 300 ミリ秒の遅延が発生します。この 300 ミリ秒の遅延は、ダブル クリックを判断するために発生します。クリック イベントのみが、後続のアクションが発生しないようにデフォルトの待機時間が経過するまでトリガーされないため、長押しします。そのため、タッチ イベントの応答が速くなり、エクスペリエンスが向上します。

タッチイベントの種類:

タッチに関連した状態変化を区別するために、複数の種類のタッチイベントが存在します。現在のイベントのタイプは、タッチ イベントの <font face="NSimsun">TouchEvent.type</font> 属性を調べることで判断できます。

注: 多くの場合、タッチ イベントとマウス イベントは同時にトリガーされます (目的は、タッチ デバイス用に最適化されていないコードでもタッチ デバイスで正常に動作できるようにすることです)デバイス)。タッチ イベントを使用する場合は、<font face="NSimsun">event.preventDefault()</font> を呼び出して、マウス イベントがトリガーされるのを防ぐことができます。

標準タッチイベント

テーブル>

オブジェクトのプロパティをタッチします

イベント名 説明 タッチ配列が含まれます

タッチスタート

ユーザーがタッチ サーフェス上にタッチ ポイントを置いたときに発生します。イベント <font face="NSimsun">要素</font> のターゲットは、次のターゲット <font face="NSimsun">要素</font> になります。タッチ位置コード> はい

タッチムーブ

事件名称 描述 包含touches数组

touchstart

当用户在触摸平面上放置了一个触点时触发。事件的目标 <font face="NSimsun">element</font> 将是触点位置上的那个目标 <font face="NSimsun">element</font>

touchmove

当用户在触摸平面上移动触点时触发。

事件的目标 <font face="NSimsun">element</font> 和这个<font face="NSimsun"> touchmove </font>事件对应的 <font face="NSimsun">touchstart 事件的目标</font> <font face="NSimsun">element</font> 相同,

哪怕当 <font face="NSimsun">touchmove</font> 事件触发时,触点已经移出了该 <font face="NSimsun">element</font> 。

touchend

当一个触点被用户从触摸平面上移除(当用户将一个手指离开触摸平面)时触发。

当触点移出触摸平面的边界时也将触发。例如用户将手指划出屏幕边缘。

已经被从触摸平面上移除的触点,可以在 changedTouches 属性定义的 TouchList 中找到。

touchenter

当触点进入某个 <font face="NSimsun">element</font> 时触发。此事件没有冒泡过程。

touchleave

当触点离开某个 <font face="NSimsun">element</font> 时触发。此事件没有冒泡过程。

touchcancel

当触点由于某些原因被中断时触发。有几种可能的原因如下(具体的原因根据不同的设备和浏览器有所不同):

  • 由于某个事件取消了触摸:例如触摸过程被一个模态的弹出框打断。
  • 触点离开了文档窗口,而进入了浏览器的界面元素、插件或者其他外部内容区域。
  • 当用户产生的触点个数超过了设备支持的个数,从而导致 <font face="NSimsun">TouchList</font> 中最早的 <font face="NSimsun">Touch</font> 对象被取消。
ユーザーがタッチ面上で接触点を移動すると発生します。 イベント <font face="NSimsun">要素</font>のターゲットは、この <font face="NSimsun"> touchmove </font> に対応します。 > イベント <font face="NSimsun">touchstart イベント</font> のターゲットは <font face="NSimsun">要素</font> と同じです。コード>、 <font face="NSimsun">touchmove</font> イベントがトリガーされても、タッチ ポイントが <font face="NSimsun">要素の外に移動しています。 </font>
はい

タッチエンド

ユーザーによってタッチ ポイントがタッチ表面から離れたとき (ユーザーがタッチ表面から指を離したとき) に発生します。 接触がタッチ面の境界外に移動したときにもトリガーされます。たとえば、ユーザーが画面の端から指を抜きます。 タッチ プレーンから削除されたタッチは、TouchList で定義されている changedTouches 属性で確認できます。 はい

タッチエンター

連絡先が <font face="NSimsun">要素</font>に入るときにトリガーされます。 このイベントにはバブリング処理はありません。 はい

タッチリーブ

連絡先が <font face="NSimsun">要素</font>を離れるときに発生します。 このイベントにはバブリング処理はありません。 はい

タッチキャンセル

何らかの理由で連絡が中断されたときに発生します。次のようないくつかの理由が考えられます (具体的な理由はデバイスやブラウザによって異なります):
  • イベントによりタッチがキャンセルされました。たとえば、モーダル ポップアップ ボックスによってタッチ プロセスが中断されました。
  • タッチ ポイントがドキュメント ウィンドウから出て、ブラウザのインターフェイス要素、プラグイン、またはその他の外部コンテンツ領域に入ります。
  • ユーザーが生成したタッチ ポイントの数がデバイスでサポートされている数を超えた場合、<font face="NSimsun">TouchList</font> code> ="NSimsun">タッチ オブジェクトがキャンセルされます。
はい
。 が含まれます。 。 テーブル>

<font face="NSimsun">Touch.identifier</font> タッチ面と接触している点を一意に識別する値を返します。この値は、この指 (またはスタイラスなど) がタッチ面を離れるまでトリガーされるすべてのイベントにわたって一貫しています。
<font face="NSimsun">Touch.screenX</font> 画面の左端を基準としたタッチ ポイントの X 座標。読み取り専用プロパティ。
<font face="NSimsun">タッチスクリーン Y</font> 画面の上端を基準としたタッチ ポイントの Y 座標。読み取り専用プロパティ。
<font face="NSimsun">Touch.clientX</font> 表示されているビューポートの左端を基準としたタッチ ポイントの X 座標には、読み取り専用のプロパティが含まれません。
<font face="NSimsun">Touch.clientY</font> 表示されているビューポートの上端を基準としたタッチ ポイントの Y 座標には、読み取り専用のプロパティが含まれません。
<font face="NSimsun">Touch.pageX</font> HTML ドキュメントの左端を基準としたタッチ ポイントの X 座標。水平スクロールがある場合offset、この値には水平スクロール オフセット読み取り専用プロパティ
<font face="NSimsun">Touch.pageY</font> HTML ドキュメントの上端を基準としたタッチ ポイントの Y 座標。<font face="NSimsun">水平スクロール オフセットがある場合、この値には垂直スクロール オフセットが含まれます。</font> 。<strong>読み取り専用属性。</strong>
<font face="NSimsun">Touch.radiusX</font> ユーザーとタッチ面の間の接触面を囲むことができる最小の楕円の横軸 (X 軸) の半径。この値の単位は <font face="NSimsun"> と同じです。 screenX。</font>読み取り専用属性。
<code><font face="NSimsun">Touch.force</font> 指がタッチ面を押す圧力の量。0.0 (圧力なし) ~ 1.0 (最大圧力) の浮動小数点数。読み取り専用プロパティ
<code><font face="NSimsun">Touch.radiusY</font> ユーザーとタッチ面の間の接触面を囲むことができる最小の楕円の縦軸 (Y 軸) の半径。この値の単位は <font face="NSimsun"> と同じです。 screenY。</font>読み取り専用属性。
<code><code><font face="NSimsun">Touch.target</font>
<font face="NSimsun">Touch.identifier</font> 返回一个可以唯一地识别和触摸平面接触的点的值. 这个值在这根手指(或触摸笔等)所引发的所有事件中保持一致, 直到它离开触摸平面.
<font face="NSimsun">Touch.screenX</font> 触点相对于屏幕左边沿的的X坐标. 只读属性.
<font face="NSimsun">Touch.screenY</font> 触点相对于屏幕上边沿的的Y坐标. 只读属性.
<font face="NSimsun">Touch.clientX</font> 触点相对于可见视区左边沿的的X坐标. 不包括任何滚动偏移. 只读属性.
<font face="NSimsun">Touch.clientY</font> 触点相对于可见视区上边沿的的Y坐标. 不包括任何滚动偏移. 只读属性.
<font face="NSimsun">Touch.pageX</font> 触点相对于HTML文档左边沿的的X坐标. 当存在水平滚动的偏移时, 这个值包含了水平滚动的偏移只读属性.
<font face="NSimsun">Touch.pageY</font> 触点相对于HTML文档上边沿的的Y坐标. <font face="NSimsun">当存在水平滚动的偏移时, 这个值包含了垂直滚动的偏移</font>只读属性.
<font face="NSimsun">Touch.radiusX</font> 能够包围用户和触摸平面的接触面的最小椭圆的水平轴(X轴)半径. 这个值的单位和<font face="NSimsun"> screenX 相同. </font>只读属性.
<code><font face="NSimsun">Touch.force</font> 手指挤压触摸平面的压力大小, 从0.0(没有压力)到1.0(最大压力)的浮点数. 只读属性.
<code><font face="NSimsun">Touch.radiusY</font> 能够包围用户和触摸平面的接触面的最小椭圆的垂直轴(Y轴)半径. 这个值的单位和<font face="NSimsun"> screenY 相同. </font>只读属性.
<code><code><font face="NSimsun">Touch.target</font>

当这个触点最开始被跟踪时(在 <font face="NSimsun">touchstart</font> 事件中), 触点位于的HTML元素. 哪怕在触点移动过程中, 触点的位置已经离开了这个元素的有效交互区域,

或者这个元素已经被从文档中移除. 需要注意的是, 如果这个元素在触摸过程中被移除, 这个事件仍然会指向它, 但是不会再冒泡这个事件到 <font face="NSimsun">window</font> 或 <font face="NSimsun">document</font> 对象.

因此, 如果有元素在触摸过程中可能被移除, 最佳实践是将触摸事件的监听器绑定到这个元素本身, 防止元素被移除后, 无法再从它的上一级元素上侦测到从该元素冒泡的事件. 只读属性.

このタッチ ポイントが最初に追跡されるとき (<font face="NSimsun">touchstart</font> イベント内)、タッチ ポイントは HTML 要素内にあります。ポイントの移動プロセス中に、タッチ ポイントの位置がこの要素の有効なインタラクション エリアから外れました。

または、この要素がドキュメントから削除された場合、この要素がタッチ プロセス中に削除された場合でも、このイベントは引き続きその要素を指しますが、このイベントは ウィンドウ または <font face="NSimsun">ドキュメント</font> オブジェクト。

したがって、タッチ プロセス中に削除される可能性のある要素がある場合、ベスト プラクティスは、要素が親要素から削除されないように、タッチ イベント リスナーを要素自体にバインドすることです。イベントがバブリングで検出されました。この要素からは読み取り専用属性。

IE指针事件
事件名称 描述(在触摸设备上)
MSPointerDown 触摸开始
MSPointerMove 接触点移动
MSPointerUp 触摸结束
MSPointerOver 触摸点移动到元素内,相当于mouseover
MSPointerOut 触摸点离开元素,相当于mouseout
IE10 のタッチイベント

MSPointerEvent プロパティ

属性 描述
hwTimestamp 创建事件的时间(ms)
isPrimary 标识该指针是不是主指针
pointerId 指针的唯一ID(类似于触摸事件的标识符)
pointerType 一个整数,标识了该事件来自鼠标、手写笔还是手指
pressure 笔的压力,0-255,只有手写笔输入时才可用
rotation 0-359的整数,光标的旋转度(如果支持的话)
tiltX/tiltY 手写笔的倾斜度,只有用手写笔输入时才支持

同等のイベント

鼠标 触摸 键盘
mousedown touchstart keydown
mousemove touchmove keydown
mouseup touchend keyup
mouseover   focus

明らかに、タッチ アクションのシーケンス: touchstart-touchmove-touchend、マウスのシーケンス:mousedown-mousemove-mouseup、キーボードのシーケンス:keydown-keypress-keyup は、3 つの対話パターンすべてが非常に似ているため、これは偶然ではありません。 start-move-stop で記述できます。

そうは言っても、クリックは 300 ミリ秒の遅延を伴う touchstart-touchmove-touchend プロセスを通過する必要があるため、タップとは同じポイントを短時間タッチすることを意味します。

カプセル化されたタップイベントとロングタップイベント

XML/HTML コードコンテンツをクリップボードにコピー
  1. (function() {
  2. var タッチスタート、タッチエンド;    
  3. if (typeof(window.ontouchstart) != '未定義') {
  4. タッチスタート = 'タッチスタート';    
  5. タッチエンド = 'タッチエンド';    
  6. TOUCHMOVE='タッチムーブ';    
  7. } else if (typeof(window.onmspointerdown) != '未定義') {
  8. TOUCHSTART = 'MSPointerDown';    
  9. タッチエンド = 'MSPointerUp';    
  10. TOUCHMOVE='MSPointerMove';    
  11. } else {
  12. タッチスタート = 'マウスダウン';    
  13. タッチエンド = 'マウスアップ';    
  14. TOUCHMOVE = 'mousemove';    
  15. }
  16. 関数 NodeTouch(ノード) {
  17. this._node = ノード;    
  18. }
  19. function tap(node,callback,scope) {
  20. node.addEventListener(TOUCHSTART, function(e) {
  21. x = e.touches[0].pageX;    
  22. y = e.touches[0].pageY;    
  23. });    
  24. node.addEventListener(TOUCHEND, function(e) {
  25. e.stopPropagation();    
  26. e.preventDefault();    
  27. var curx = e.changedTouches[0].pageX;    
  28. var cury = e.changedTouches[0].pageY;    
  29. if (Math.abs(curx - x) < 6 && Math.abs(cury - y) < 6) {
  30. callback.apply(scope, arguments);    
  31. }
  32. });    
  33. }
  34. 関数 longTap(node,callback,scope) {
  35. var x,y,startTime=0,endTime=0,in_dis=false;    
  36. node.addEventListener(TOUCHSTART, function(e) {
  37. x = e.touches[0].pageX;    
  38. y = e.touches[0].pageY;    
  39. startTime=(new Date()).getTime();    
  40. });    
  41. node.addEventListener(TOUCHEND, function(e) {
  42. e.stopPropagation();    
  43. e.preventDefault();    
  44. var curx = e.changedTouches[0].pageX;    
  45. var cury = e.changedTouches[0].pageY;    
  46. if (Math.abs(curx - x) < 6 && Math.abs(cury - y) < 6) {
  47. in_dis=true;    
  48. }その他{
  49. in_dis=false;    
  50. }
  51. endTime=(new Date()).getTime();    
  52. if (endTime - startTime > 300 && in_dis) {
  53. callback.apply(scope, arguments);    
  54. }
  55. });    
  56. }
  57. NodeTouch.prototype.on = function(evt, callback, scope) {
  58. var scopeObj;    
  59. var x,y;    
  60. if (!scope) {
  61. scopeObj = this._node;    
  62. } else {
  63. スコープscopeObj = スコープ;    
  64. }
  65. if (evt === 'タップ') {
  66. tap(this._node,callback,scope);    
  67. } else if(evt === 'ロングタップ'){
  68. longTap(this._node,callback,scope);    
  69. } else {
  70. this._node.addEventListener(evt, function() {
  71. callback.apply(scope, arguments);    
  72. });    
  73. }
  74. これを返します。    
  75. }
  76. window.$ = 関数(セレクター) {
  77. var node = document.querySelector(selector);    
  78. if (ノード) {
  79. return new NodeTouch(ノード);    
  80. } else {
  81. null を返します。    
  82. }
  83. }
  84. })();    
  85. var box=$("#box");    
  86. box.on("longtap",function(){
  87. console.log("你已经长按了");    
  88. }、ボックス)

このセクション以上の HTML5 タッチ イベントの実行タップ イベント メディアは、大家のすべてのコンテンツを小分けに共有することを希望し、大家一参照、また大家多数の脚本のサポートを希望します。

翻訳地址:

http://www.cnblogs.com/hutuzhu/archive/2016/03/25/5315638.html

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート