click事件伝説の300 ms遅延

3968 ワード

click&tap


モバイル側の皆さんがお勧めする書き方は、clickの代わりにzeptoのtapイベントを採用しています.理由は、clickイベントに伝説の300 msの遅延があるからです.

テスト結果


移動先有効化
テストではclickイベントがtapイベントよりも速いことが分かった.
clickとtapのトリガ遅延は100 ms程度しかありません
使用不可
テストではclickイベントがtapより200 ms程度遅いことが分かった.
tapとtouchendトリガ遅延はtouchstartに対して100 ms程度であった.[このオン/オフは同じです].

demo

//zepto  1.2 

//touch.js  github 


    // click  
    document.getElementById('h3').addEventListener('click', function (e) {
        console.log("=========click1======")
        console.log(new Date().getTime());
    });

    $("#h3").on('tap', function (e) {
        console.log("=========zepto tap1======")
        console.log(new Date().getTime());
    });

    document.getElementById('h3').addEventListener('click', function (e) {
        console.log("=========click2======")
        console.log(new Date().getTime());
    });

    $("#h3").on('tap', function (e) {
        console.log("=========zepto tap2======")
        console.log(new Date().getTime());
    });

    document.getElementById('h3').addEventListener('touchend', function (e) {
        console.log("=========touchend======")
        console.log(new Date().getTime());
    });

    document.getElementById('h3').addEventListener('touchstart', function (e) {
        console.log("=========touchstart======")
        console.log(new Date().getTime());
    });
   


output

//output [ ]
click&tap.html?_ijt=jcsp6kceg9n7qagit0tsqmnrn3:56 =========touchstart======
click&tap.html?_ijt=jcsp6kceg9n7qagit0tsqmnrn3:57 1494338413993
click&tap.html?_ijt=jcsp6kceg9n7qagit0tsqmnrn3:51 =========touchend======
click&tap.html?_ijt=jcsp6kceg9n7qagit0tsqmnrn3:52 1494338414081
click&tap.html?_ijt=jcsp6kceg9n7qagit0tsqmnrn3:31 =========click1======
click&tap.html?_ijt=jcsp6kceg9n7qagit0tsqmnrn3:32 1494338414082
click&tap.html?_ijt=jcsp6kceg9n7qagit0tsqmnrn3:41 =========click2======
click&tap.html?_ijt=jcsp6kceg9n7qagit0tsqmnrn3:42 1494338414083
click&tap.html?_ijt=jcsp6kceg9n7qagit0tsqmnrn3:36 =========zepto tap1======
click&tap.html?_ijt=jcsp6kceg9n7qagit0tsqmnrn3:37 1494338414084
click&tap.html?_ijt=jcsp6kceg9n7qagit0tsqmnrn3:46 =========zepto tap2======
click&tap.html?_ijt=jcsp6kceg9n7qagit0tsqmnrn3:47 1494338414084

//output [ ]
click&tap.html?_ijt=jcsp6kceg9n7qagit0tsqmnrn3:56 =========touchstart======
click&tap.html?_ijt=jcsp6kceg9n7qagit0tsqmnrn3:57 1494341055611
click&tap.html?_ijt=jcsp6kceg9n7qagit0tsqmnrn3:51 =========touchend======
click&tap.html?_ijt=jcsp6kceg9n7qagit0tsqmnrn3:52 1494341055710
click&tap.html?_ijt=jcsp6kceg9n7qagit0tsqmnrn3:36 =========zepto tap1======
click&tap.html?_ijt=jcsp6kceg9n7qagit0tsqmnrn3:37 1494341055712
click&tap.html?_ijt=jcsp6kceg9n7qagit0tsqmnrn3:46 =========zepto tap2======
click&tap.html?_ijt=jcsp6kceg9n7qagit0tsqmnrn3:47 1494341055713
click&tap.html?_ijt=jcsp6kceg9n7qagit0tsqmnrn3:31 =========click1======
click&tap.html?_ijt=jcsp6kceg9n7qagit0tsqmnrn3:32 1494341055911
click&tap.html?_ijt=jcsp6kceg9n7qagit0tsqmnrn3:41 =========click2======
click&tap.html?_ijt=jcsp6kceg9n7qagit0tsqmnrn3:42 1494341055911

関連する問題


移動端にzeptoのtapイベントを採用すると少し透き通る現象があります.
理由は、tapイベントで親(一般的にはマスク層)のdomを閉じたり隠したりし、子domにもクリックイベントが存在し、イベントフローメカニズム(バブルをキャプチャ)により子domにもクリックイベントがトリガーされるためである.
解析:いずれもバブルフェーズ(イベントがデフォルトのバブルフェーズをトリガする)では、親はサブセット後よりもトリガされるに違いなく、点透現象は発生しないはずです.
一部のブログ記事では、親がtapを使用し、サブセットがclickを使用すると書かれています.demoのトリガ時間を見ると、スケールを有効にしない場合にのみ発生します.
主にその馬鹿がビジネスロジックの中でclickとtapを同時に使うのだろうか.
したがって、基本的には、キャプチャフェーズを同時に使用してイベントをトリガするような感じがします.しかし、zeptoのイベントメカニズムはイベントバブルに基づいているという問題もある.jsではイベントはdocumentにバインドされています.