ブラウザでよく使用される 5 つのイベントの分析

不言
リリース: 2018-09-10 16:11:30
オリジナル
3085 人が閲覧しました

この記事は、ブラウザーでよく使用されるイベント分析に関する内容を提供します。必要な方は参考にしていただければ幸いです。

フォーム イベント

キーボード イベント

は、<input>, <textarea>の値が変更されるとトリガーされます。さらに、contenteditable 属性を持つ要素がオンになっている場合、値が変更されるたびに input イベントもトリガーされます。入力イベントの特徴の 1 つは、継続的にトリガーされることです。たとえば、ユーザーがボタンを押すたびに入力イベントがトリガーされます。

そのようなイベントには、keydown、keyup、

マウス イベントが含まれます。

select イベントは、<input>、<textarea> でテキストが選択されるとトリガーされます。

change イベントは、<input>、

  • ラジオまたはチェックボックスがアクティブ化されたときにトリガーされます。

  • ユーザーが送信すると発生します。たとえば、次のリスト (選択) から選択を完了し、日付またはファイルの入力ボックスで選択を完了します。

  • テキストボックスまたはテキストエリア要素の値が変更され、フォーカスが失われたときにトリガーされます。

  • リセット イベントは、フォームがリセットされる (すべてのフォーム メンバーがデフォルト値に戻される) ときに、form 要素によってトリガーされます。

  • submit イベントは、フォーム データがサーバーに送信されるときに、form 要素によってトリガーされます。

ドキュメント イベント:

beforeunload

beforeunload イベントは、ウィンドウが閉じられようとしているとき、またはドキュメントと Web ページのリソースがアンロードされようとしているときにトリガーされます。ユーザーが誤って Web ページを閉じてしまうのを防ぐために使用できます。このイベントのデフォルトのアクションは、現在のウィンドウまたはドキュメントを閉じることです。リスニング関数でevent.preventDefault()が呼び出された場合、またはイベントオブジェクトのreturnValue属性にnull以外の値が割り当てられた場合、Webページを閉じるかどうかを確認する確認ボックスが自動的にポップアップ表示され、ユーザーにWebページを閉じるかどうかを確認します。ユーザーが「キャンセル」ボタンをクリックしても、Web ページは閉じません。 listen 関数によって返された文字列が確認ダイアログ ボックスに表示されます:

  window.addEventListener('beforeunload', function(event) {
    if(event.preventDefault){
      event.preventDefault();
    } else {
      event.returnValue = '你确认要离开吗?';
    }
  });
ログイン後にコピー

unload およびload

unload イベントは、ウィンドウが閉じられているとき、またはドキュメント オブジェクトがアンロードされようとしているときにトリガーされ、ウィンドウなどのオブジェクトで発生します。 、本体、フレームセットなど。そのトリガー順序は、beforeunload イベントと pagehide イベントの後にあります。アンロード イベントは、ページがブラウザによってキャッシュされていない場合にのみトリガーされます。つまり、「進む/戻る」を押してページがアンロードされた場合、アンロード イベントはトリガーされません。アンロード イベントが発生すると、ドキュメント オブジェクトは特別な状態になります。すべてのリソースはまだ存在しますが、ユーザーには表示されず、UI インタラクション (window.open、alert、confirm メソッドなど) はすべて無効です。このときエラーが発生してもドキュメントのアンロードを中止することはできません。

ページが正常に読み込まれると読み込みイベントがトリガーされ、ページの読み込みに失敗するとエラー イベントがトリガーされます。ページはブラウザのキャッシュから読み込まれるため、load イベントはトリガーされないことに注意してください。

これら 2 つのイベントは実際には進捗イベントであり、ドキュメント オブジェクトだけでなく、さまざまな外部リソースでも発生します。 Web の閲覧は、画像、スタイル シート、スクリプト、ビデオ、オーディオ、Ajax リクエスト (XMLHttpRequest) などのさまざまなリソースを読み込むプロセスです。これらのリソース、ドキュメント オブジェクト、ウィンドウ オブジェクト、および XMLHttpRequestUpload オブジェクトは、ロード イベントとエラー イベントをトリガーします。

pageshow および pagehide

pageshow イベント、pagehide イベント: デフォルトでは、ユーザーが「進む/戻る」ボタンをクリックすると、ブラウザーは現在のセッション (セッション) でページをキャッシュします。キャッシュ。

pageshow イベントは、最初の読み込みやキャッシュからの読み込みなど、ページが読み込まれるときにトリガーされます。ページが (ブラウザーからキャッシュされているかどうかに関係なく) 読み込まれるたびに実行するコードを指定したい場合は、このイベントの listen 関数にコードを配置できます。初めてロードする場合、その起動順序はロード イベントよりも遅れます。キャッシュからロードする場合、キャッシュ内のページは通常、ロード イベントのリスニング関数が実行された後の状態と同じであるため、ロード イベントはトリガーされません。したがって、それを繰り返す必要はありません。同様に、ページがキャッシュから読み込まれる場合、Web ページ内で初期化された JavaScript スクリプト (DOMContentLoaded イベントの listen 関数など) は実行されません。 Pageshow イベントには永続化属性があり、ブール値を返します。ページが初めてロードされるとき、この属性は false で、ページがキャッシュからロードされるとき、この属性は true です。

document.onpageshow = function(event){}
  if(event.persisted){
    //如果存缓存加载
  }
}
ログイン後にコピー
同様に、この属性を true に設定すると、ページがキャッシュに保存されます。このとき、アンロード イベントのリッスン関数の場合、Web ページはキャッシュに保存されません。が設定されている場合、関数はページ非表示になり、イベントの直後に実行されます。ページにフレームが含まれている場合、フレーム ページの Pageshow イベントと PageHide イベントがメイン ページの前にトリガーされます。

DOMContentLoaded 和 readystatechange

DOMContentLoaded 事件当 HTML 文档下载并解析完成以后,就会在 document 对象上触发 DOMContentLoaded 事件。这时,仅仅完成了 HTML 文档的解析(整张页面的DOM生成),所有外部资源(样式表, 脚本, iframe等等)可能还没有下载结束。也就是说,这个事件比 load 事件,发生时间早得多。注意,网页的 JavaScript 脚本是同步执行的,所以定义 DOMContentLoaded 事件的监听函数,应该放在所有脚本的最前面。否则脚本一旦发生堵塞,将推迟触发 DOMContentLoaded 事件。此外,IE8 不支持 DOMContentLoaded 事件,可以使用 readystatechange 事件代替。

readystatechange 事件发生在 Document 对象和 XMLHttpRequest 对象,当它的 readyState 属性发生变化时触发。

其他文档级事件

上面重点提到了 DOMContentLoaded, readystatechange, pageshow, pagehide, unload, load 和 beforeunload 事件,此外还有一下事件:

  • onafterprint: 文档打印之后运行的脚本

  • onbeforeprint: 文档打印之前运行的脚本

  • onbeforeunload: 文档卸载之前运行的脚本(上文已涉及)

  • onerror: 在错误发生时运行的脚本

  • onhaschange: 当文档已改变时运行的脚本

  • onload: 页面结束加载之后触发(上文已涉及)

  • onmessage: 在消息被触发时运行的脚本

  • onoffline: 当文档离线时运行的脚本

  • ononline: 当文档上线时运行的脚本

  • onpagehide: 当窗口隐藏时运行的脚本(上文已涉及)

  • onpageshow: 当窗口成为可见时运行的脚本(上文已涉及)

  • onpopstate: 当窗口历史记录改变时运行的脚本

  • onredo: 当文档执行撤销(redo)时运行的脚本

  • onresize: 当浏览器窗口被调整大小时触发

  • onstorage: 在 Web Storage 区域更新后运行的脚本

  • onundo: 在文档执行 undo 时运行的脚本

  • onscroll: 事件在文档或文档元素滚动时执行脚本

鼠标事件 与 MouseEvent对象

new MouseEvent(typeArg, mouseEventInit);
ログイン後にコピー

内置的鼠标事件包括:

  1. mousedown: 按下鼠标

  2. mouseup: 鼠标抬起

  3. click: 点击

  4. dblclick: 双击

  5. mousemove: 鼠标移动

  6. mouseover: 鼠标移入,冒泡

  7. mouseout: 鼠标移出,冒泡

  8. mouseenter: 鼠标移入,不冒泡

  9. mouseleave: 鼠标移出,不冒泡

  10. contextmenu: 右键菜单

  11. wheel: 滚轮事件

其具有如下常用属性:

  • altKey,ctrlKey,metaKey,shiftKey属性返回一个布尔值,表示鼠标事件发生时,是否按下某个键;

  • button 返回事件的鼠标键信息, 值为0(左键), 1或4(中键, 4为IE中的值),2(右键),可通过switch来选择执行分之);

  • buttons 属性返回一个3个比特位的值,表示同时按下了哪些键

  • clientX,clientY 返回鼠标位置相对于浏览器窗口左上角的坐标,单位为像素

  • screenX,screenY 返回鼠标位置相对于屏幕左上角的坐标,单位为像素

  • movementX,movementY 返回一个位移,单位为像素,表示当前位置与上一个 mousemove 事件之间的距离,在数值上:

currentEvent.movementX = currentEvent.screenX - previousEvent.screenX
currentEvent.movementY = currentEvent.screenY - previousEvent.screenY
  • relatedTarget属性返回事件的次要相关节点,即和target属性对应的节点,如: mouseout target 指将要离开的节点,relatedTarget 指将要进入的节点。对于那些没有次要相关节点的事件,该属性返回null

  • wheel 事件是与鼠标滚轮相关的事件,浏览器提供一个 WheelEvent 构造函数 new WheelEvent(typeArg, mouseEventInit)

  • deltaX: 返回一个数值,表示滚轮的水平滚动量

  • deltaY: 返回一个数值,表示滚轮的垂直滚动量

  • deltaZ: 返回一个数值,表示滚轮的Z轴滚动量

  • deltaMode: 返回一个数值,表示滚动的单位,适用于上面三个属性。0表示像素,1表示行,2表示页

键盘事件 KeyboardEvent 对象

构造函数 new KeyboardEvent(typeArg, KeyboardEventInit)
ログイン後にコピー

键盘事件包括keydown(按下键盘时触发该事件),keypress(只要按下的键并非Ctrl, Alt, Shift和Meta,就接着触发keypress事件), keyup(松开键盘时触发该事件)

  • altKey,ctrlKey,metaKey,shiftKey: 返回一个布尔值,表示是否按下对应的键

  • key: 返回一个字符串,表示按下的键名。如果同时按下一个控制键和一个符号键,则返回符号键的键名

  • keyCode: 返回按键的 ASCII 码,注意: 这里是不区分大小写的,A键不论输出 A 还是 a keyCode 都是68。在 IE 中使用 witch 属性

进度事件 ProgressEvent对象

new ProgressEvent(type, {
  lengthComputable: aBooleanValue,    // false as default
  loaded: aNumber,                    // 0 as default
  total: aNumber                      // 0 as default
});
ログイン後にコピー

进度事件用来描述一个事件进展的过程,比如XMLHttpRequest对象发出的HTTP请求的过程, <img>, <audio>, <video>, <style>, <link>加载外部资源的过程,包括下载和上传。通常包括以下事件:

  1. abort事件: 当进度事件被中止时触发。如果发生错误,导致进程中止,不会触发该事件。

  2. error事件: 由于错误导致资源无法加载时触发,不会冒泡。error 事件的监听函数最好放在如 img 元素的 HTML 属性中。

  3. load事件: 进度成功结束时触发。

  4. loadstart事件: 进度开始时触发。

  5. loadend事件: 进度停止时触发,发生顺序排在error事件abort事件load事件后面。loadend事件的监听函数可以用来取代abort事件/load事件/error事件的监听函数,loadend事件本身不提供关于进度结束的原因,但可以用它来做所有进度结束场景都需要做的一些操作。

  6. progress事件: 当操作处于进度之中,由传输的数据块不断触发。

  7. timeout事件: 进度超过限时触发

这类事件具有以下属性:

  • lengthComputable: 返回一个布尔值,表示当前进度是否具有可计算的长度。如果为false,就表示当前进度无法测量。

  • total: 返回一个数值,表示当前进度的总长度。如果是通过 HTTP 下载某个资源,表示内容本身的长度,不含 HTTP 头部的长度。如果 lengthComputable 属性为 false,则 total 属性就无法取得正确的值。

  • loaded: 返回一个数值,表示当前进度已经完成的数量。该属性除以total属性,就可以得到目前进度的百分比。

//进度计算
if (e.lengthComputable){
  var percentComplete = e.loaded / e.total;
}
ログイン後にコピー

拖拽事件 DragEvent 对象

new DragEvent(type, DragEventInit);
ログイン後にコピー

拖拽指的是,用户在某个对象上按下鼠标键不放,拖动它到另一个位置,然后释放鼠标键,将该对象放在那里。拖拽的对象有好几种,包括 Element 节点, 图片, 链接, 选中的文字等等。在 HTML 网页中,除了 Element 节点默认不可以拖拽,其他(图片, 链接, 选中的文字)都是可以直接拖拽的。为了让 Element 节点可拖拽,可以将该节点的 draggable 属性设为 true。draggable 属性可用于任何 Element 节点,但是图片(img 元素)和链接(a 元素)不加这个属性,就可以拖拽。对于它们,用到这个属性的时候,往往是将其设为 false,防止拖拽。注意,一旦某个 Element 节点的 draggable 属性设为 true,就无法再用鼠标选中该节点内部的文字或子节点了。

当Element节点或选中的文本被拖拽时,就会持续触发拖拽事件,包括以下一些事件:

  1. drag事件: 拖拽过程中,在被拖拽的节点上持续触发。

  2. dragstart事件: 拖拽开始时在被拖拽的节点上触发,该事件的target属性是被拖拽的节点。通常应该在这个事件的监听函数中,指定拖拽的数据。

  3. dragend事件: 拖拽结束时(释放鼠标键或按下escape键)在被拖拽的节点上触发,该事件的target属性是被拖拽的节点。它与dragStart事件,在同一个节点上触发。不管拖拽是否跨窗口,或者中途被取消,dragend事件总是会触发的。

  4. dragenter事件: 拖拽进入当前节点时,在当前节点上触发,该事件的target属性是当前节点。通常应该在这个事件的监听函数中,指定是否允许在当前节点放下(drop)拖拽的数据。如果当前节点没有该事件的监听函数,或者监听函数不执行任何操作,就意味着不允许在当前节点放下数据。在视觉上显示拖拽进入当前节点,也是在这个事件的监听函数中设置。

  5. dragover事件: 拖拽到当前节点上方时,在当前节点上持续触发,该事件的target属性是当前节点。该事件与dragenter事件基本类似,默认会重置当前的拖拽事件的效果(DataTransfer对象的dropEffect属性)为none,即不允许放下被拖拽的节点,所以如果允许在当前节点drop数据,通常会使用preventDefault方法,取消重置拖拽效果为none。

  6. dragleave事件: 拖拽离开当前节点范围时,在当前节点上触发,该事件的target属性是当前节点。在视觉上显示拖拽离开当前节点,就在这个事件的监听函数中设置。

  7. drop事件: 被拖拽的节点或选中的文本,释放到目标节点时,在目标节点上触发。注意,如果当前节点不允许drop,即使在该节点上方松开鼠标键,也不会触发该事件。如果用户按下Escape键,取消这个操作,也不会触发该事件。该事件的监听函数负责取出拖拽数据,并进行相关处理。

关于拖拽事件,有以下几点注意事项:

  1. 拖拽过程只触发以上这些拖拽事件,尽管鼠标在移动,但是鼠标事件不会触发。

  2. 将文件从操作系统拖拽进浏览器,不会触发 dragStart 和 dragend 事件。

  3. dragenter 和 dragover 事件的监听函数,用来指定可以放下(drop)拖拽的数据。由于网页的大部分区域不适合作为 drop 的目标节点,所以这两个事件的默认设置为当前节点不允许 drop。如果想要在目标节点上 drop 拖拽的数据,首先必须阻止这两个事件的默认行为,或者取消这两个事件。

<p ondragover="return false">
//或
<p ondragover="event.preventDefault()">
ログイン後にコピー
  1. 拖拽事件用一个 DragEvent 对象表示,该对象继承 MouseEvent 对象,DragEvent 对象只有一个独有的属性 dataTransfer,其他都是继承的属性。dataTransfer 属性用来读写拖拽事件中传输的数据,所有的拖拽事件都有一个 dataTransfer 属性,用来保存需要传递的数据,这个属性的值是一个 DataTransfer 对象。拖拽的数据保存两方面的数据: 数据的种类(又称格式)和数据的值。数据的种类是一个MIME字符串,比如 text/plain 或者 image/jpg,数据的值是一个字符串;

dataTransfer 对象的属性的值是一个对象,其中包括以下属性:

  • dropEffect 属性: 设置放下(drop)被拖拽节点时的效果,可能的值包括 copy(复制被拖拽的节点), move(移动被拖拽的节点), link(创建指向被拖拽的节点的链接), none(无法放下被拖拽的节点)。设置除此以外的值,都是无效的。

  • effectAllowed 属性: 设置本次拖拽中允许的效果,可能的值包括 copy, move, link, copyLink, copyMove, linkMove, all, none, uninitialized(默认值,等同于 all)。如果某种效果是不允许的,用户就无法在目标节点中达成这种效果。

  • files 属性: 是一个 FileList 对象,包含一组本地文件,可以用来在拖拽操作中传送。如果本次拖拽不涉及文件,则属性为空的 FileList 对象。通过files属性读取拖拽文件的信息。如果想要读取文件内容,就要使用 FileReader 对象。

  • types 属性: 是一个数组,保存每一次拖拽的数据格式,如'text/uri-list'

  • setData() 方法: 用来设置事件所带有的指定类型的数据。它接受两个参数,第一个是数据类型,第二个是具体数据。如果指定的类型在现有数据中不存在,则该类型将写入types属性;如果已经存在,在该类型的现有数据将被替换。

event.dataTransfer.setData("text/plain", "Text to drag");
ログイン後にコピー
  • getData() 方法接受一个字符串(表示数据类型)作为参数,返回事件所带的指定类型的数据(通常是用 setData 方法添加的数据)。如果指定类型的数据不存在,则返回空字符串。

event.dataTransfer.getData(types[0]);
ログイン後にコピー
  • clearData() 方法接受一个字符串(表示数据类型)作为参数,删除事件所带的指定类型的数据。如果没有指定类型,则删除所有数据。如果指定类型不存在,则原数据不受影响。

event.dataTransfer.clearData("text/uri-list");
ログイン後にコピー
  • setDragImage() 可以用来自定义这张图片,它接受三个参数,第一个是img图片元素或者canvas元素,如果省略或为null则使用被拖动的节点的外观,第二个和第三个参数为鼠标相对于该图片左上角的横坐标和右坐标。

event.dataTransfer.setDragImage(img, 0, 0);
ログイン後にコピー

触摸事件

 new Touch(touchInit);
ログイン後にコピー

触摸事件包括以下5种:

  1. touchstart: 用户接触触摸屏时触发,它的 target 属性返回发生触摸的 Element 节点(IE10+中使用 mspointerdown 事件);

  2. touchend: 用户不再接触触摸屏时(或者移出屏幕边缘时)触发,它的 target 属性与 touchstart 事件的 target 属性是一致的,它的 changedTouches 属性返回一个TouchList对象,包含所有不再触摸的触摸点(Touch对象)(IE10+中使用 mspointerup 事件);

  3. touchmove: ユーザーがタッチポイントを移動するとトリガーされ、その target 属性は touchstart イベントの target 属性と一致します。このイベントは、タッチの半径、角度、強度が変化した場合にもトリガーされます。 (mspointermove イベントは IE10 以降で使用されます);

  4. touchenter: タッチ ポイントが要素に入るとトリガーされます。このイベントにはバブリングプロセスはありません。 (mspointerover イベントは IE10 以降で使用されます);

  5. touchleave: タッチ ポイントが要素から離れるとトリガーされます。このイベントにはバブリングプロセスはありません。 (IE10 以降では mspointerout イベントを使用します);

  6. touchcancel: タッチ ポイントが何らかの理由で中断されたときにトリガーされます。考えられる理由は次のとおりです (具体的な理由はデバイスやブラウザによって異なります): (IE10 以降には対応するイベントがありません); タッチはイベントによりキャンセルされました。タッチ プロセスがモーダル ポップアップ ボックスまたは電話の中断であった場合

    タッチ ポイントがドキュメント ウィンドウを離れ、ブラウザ インターフェイス要素、プラグイン、またはその他の外部コンテンツ領域に入った場合
  1. ユーザーが生成したポイント デバイスがサポートする数を超えたため、TouchList 内の最も古い Touch オブジェクトがキャンセルされます。
  2. Touch API は 3 つのオブジェクトで構成されます。各 Touch オブジェクトはタッチ ポイントを表し、各タッチ ポイントはその位置、サイズ、形状、圧力レベル、およびターゲット要素によって記述されます。 TouchList オブジェクトは、複数のタッチ ポイントのリストを表します。具体的には、次の属性が含まれます:
  3. identifier 属性: タッチ インスタンスの一意の識別子を表します。タッチ プロセス全体を通じて変更されません (IE10 以降では pointerId 属性が使用されます)。

screenY 属性: それぞれ、画面の左上隅を基準としたタッチ ポイントの横座標と縦座標を表します。ページがスクロールされています。
  • clientY 属性: ページがスクロールされているかどうかに関係なく、ブラウザのビューポートの左上隅を基準としたタッチ ポイントの横座標と縦座標をそれぞれ表します。属性: それぞれ、現在のページの左上隅を基準としたタッチ ポイントを表します。角度の横座標と縦座標には、ページのスクロールによって生じる変位が含まれます。
  • radiusX/radiusY 属性: X 軸と Y- を返します。タッチ ポイントの周囲の影響を受ける楕円範囲の軸 (ピクセル単位)
  • rotationAngle 属性: タッチ エリア内の楕円の回転角度を 0 ~ 90 度の範囲で表します。指先が画面に触れると、タッチ範囲は楕円を形成します。この楕円形の領域を表すために、次の 3 つの属性が使用されます (IE10 以降では回転属性が使用されます)。 0 から 1 までの値を返します。タッチの圧力を示します。 0 は圧力がないことを表し、1 はハードウェアが認識できる最大圧力を表します (圧力属性は IE10 以降で使用され、値は 0 ~ 255 です)。
  • ターゲット属性: タッチが発生したノードを表す要素ノードを返します。 。このタッチ ポイントが最初に追跡されるとき (touchstart イベントで)、タッチ ポイントの移動中にタッチ ポイントの位置が有効なインタラクション エリアから外れた場合でも、タッチ ポイントが配置されている HTML 要素が表示されます。要素、または要素がドキュメントから削除された場合、この要素がタッチ プロセス中に削除された場合でも、このイベントは引き続きその要素を指しますが、このイベントはウィンドウまたはドキュメントにバブルアップされなくなることに注意してください。したがって、要素がタッチされた場合、その要素がプロセス中に削除される可能性があるため、要素が削除された後にその要素が親要素から検出されなくなるのを防ぐために、タッチ イベント リスナーを要素自体にバインドすることがベスト プラクティスです。読み取り専用プロパティ。
  • altKey/ctrlKey/metaKey/shiftKey はすべて読み取り専用プロパティです。タッチ中にキーが押されたかどうかを示すブール値を返します。
  • changedTouches プロパティ:TouchList オブジェクトを返します。現在のタッチ イベントによって引き起こされたすべての Touch オブジェクト (つまり、関連するタッチ ポイント)。これには、最後のタッチ イベントからこのイベントまでに状態が変化したすべてのタッチ ポイントを表す Touch オブジェクトが含まれています。読み取り専用プロパティ。
  • targetTouches プロパティ: ターゲットの Element ノード内でまだアクティブなすべてのタッチ ポイントを含む TouchList オブジェクトを返します。
  • touches プロパティは、TouchList オブジェクト (配列のようなオブジェクト) を返します。このオブジェクトには、どの要素から開始されているか、ステータスが変更されたかどうかに関係なく、現在タッチ面に接触しているすべての Touch オブジェクトが含まれます。読み取り専用属性
  • type 属性: このタッチ イベントのタイプを参照します。
  • target 属性: このタッチ イベントのターゲット要素。このターゲット要素は、TouchEvent.changedTouches (イベント タイプで後述) のタッチ ポイントの開始要素に対応しますが、このイベントの他のタッチ ポイントの開始要素は異なる場合があることに注意してください。念のため、個々のタッチポイントに関連付けられた目標を使用してください。
  • 以下は IE10 以降のその他のプロパティです:
  • hwTimestamp: 作成イベント時間 (ミリ秒);
  • isPrimary: 時間がメインイベントであるかどうかを示します。 event.MSPOINTER_TYPE_TOUCH、event.MAPOINTER_TYPE_PEN、event.MSPOINTER_TYPE_MOUSE、タッチ デバイスを示します。
  • tilt[X|Y]: ペンの傾きの度合い。

举一个简单例子:

function handleMove(evt) {
  evt.preventDefault(); // 阻止浏览器继续处理触摸事件,也阻止发出鼠标事件
  var touches = evt.changedTouches;
  for (var i = 0; i < touches.length; i++) {
    var id = touches[i].identifier;
    var touch = touches.identifiedTouch(id);
    console.log(touch.pageX, touch.pageY);
  }
}
ログイン後にコピー

对于跨平台交互,我封装了一个 tap相关事件如下:

//以下代码并未兼容低版本 IE
function addTapListener(node, callback){
  var startEvent = window.onmousedown ? window.onmspointerdown ? 'mspointerdow' : 'mousedown' : 'touchstart';
  var event = window.onclick ? 'click' : 'touch';
  var endEvent = window.onmouseup ? 'mouseup' : 'touchend';

  node.addEventListener(startEvent, function(e){
    var tap = document.createEvent('CustomEvent');
    tap.initCustomEvent('tapstart', true, true, null);
    node.dispatchEvent(tap);
  });
  node.addEventListener(event, function(e){
    var tap = document.createEvent('CustomEvent');
    tap.initCustomEvent('tap', true, true, null);
    node.dispatchEvent(tap);
  });
  node.addEventListener(endEvent, function(e){
    var tap = document.createEvent('CustomEvent');
    tap.initCustomEvent('tapend', true, true, null);
    node.dispatchEvent(tap);
  });

  node.addEventListener('tap', callback);
}
ログイン後にコピー

当然本文仅仅列举了一些常用事件,其实事件还有很多,本文会在必要的时候继续更新,但即便如此也不可能穷尽所有的事件,比如还有动画事件: animationstart, animation, animationend 等等。

相关推荐:

解析javascript 浏览器关闭事件_javascript技巧

JavaScript中的跨浏览器事件(图文教程)

以上がブラウザでよく使用される 5 つのイベントの分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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