4

ユーザーが任意の html ノードを 3 回クリックすると発生するカスタム イベントを作成しようとしています。

を使用しても作成できることを知っています

var evt = document.createEvent("Event");
evt.initEvent("myEvent",true,true);

しかし、その 3 回のクリック イベントをキャプチャする方法がわかりません。

誰かがこれに対する書き込みアプローチを提案してくれれば幸いです。

ありがとう!!!

4

5 に答える 5

2

特別なイベント コードと例を作成できます-これが問題の解決です:)

于 2012-04-04T14:02:17.867 に答える
2

クリック数を格納する変数を作成するだけです。

var clickTimes = 0;

element.addEventListener('click', function(event) {
    clickTimes++;
    if(clickTimes==3) { 
        clickTimes = 0;
        /* do something like dispatch my custom event */ 
    }
});
于 2012-04-04T14:00:19.333 に答える
1

これにより、特定の要素のクリックがカウントされ、3 回目のクリックごとにイベントがトリガーされます。

$('selector').on('click',function(e){
    Event_threshold = 500;

    var clicked_times = $(this).data('Event-clicked-times');

    if(clicked_times == '')
        clicked_times = 0;

    if(clicked_times == 0)
        $(this).data('Event-first-click-timestamp',e.timeStamp);

    clicked_times++;

    if(e.timeStamp-$(this).data('Event-first-click-timestamp')<Event_threshold)
    {
        if(clicked_times == 3)
        {
            $(this).data('Event-clicked-times',0);
            $(this).trigger('Event');
        }
        else
            $(this).data('Event-clicked-times',clicked_times);

    }
    else
         $(this).data('Event-clicked-times',0);
});

編集: しきい値コントロールを修正および追加しました。

于 2012-04-04T14:05:42.687 に答える
0

これは外部変数を使用せずに動作し、HTML5 の「data-」属性をストレージに使用するため、複数の要素で作業することになります。

$('#yourLink').click(function() {
     window.setTimeout(function() {$(this).data("count",1)},300)
     if(typeof $(this).data("count")=='undefined') {
         $(this).data("count",1) 
     }
     else {
       var myCount = parseInt($(this).data("count"))
       myCount++      
       if(myCount==3) {
          alert("3!")
          $(this).data("count",0)
       }
        else {
           $(this).data("count",myCount)
        }    
    }

})
于 2012-04-04T14:10:52.107 に答える
0

反復変数を作成し、要素が 3 回クリックされたかどうかを確認できます。

例えば:

var clickTimer = 0;
document.body.addEventListener('click', function() {
    clickTimer++;
    if(clickTimer == 3) {
        clickTimer = 0;
        // fire your event
    }
}, true);

dbclickタイムスタンプを最初のクリックと比較できるように、この動作を行うことができます。

例えば:

var clickTimes = 0;
var fisrtClickTime = 0;

element.addEventListener('click', function(event) {
    clickTimes++;
    if(clickTimes == 1) {
        fisrtClickTime = +new Date();
    }
    if(clickTimes == 3) { 
        clickTimes = 0;
        firstClickTime = 0;
        if((+new Date() - fisrtClickTime) < 1000) {
            /* do something like dispatch my custom event */ 
        }
    }
});
于 2012-04-04T13:59:14.750 に答える