Touch device, Single and Double Tap Events handler jQuery/Javascript?

后端 未结 4 1559
隐瞒了意图╮
隐瞒了意图╮ 2020-12-13 00:50

Background:

My site is in magento open source ecommerce solution, and in the top (header) it has a shopping cart icon. On dekstop, when user hovers

4条回答
  •  暗喜
    暗喜 (楼主)
    2020-12-13 01:45

    If you want to target mobile then you can use touchstart which is the touch equivalent of mousedown. though touch capable desktop browsers can also use this so maybe you still need to do user-agent detection if that doesn't suit you. Last I checked, there wasn't any built in "double tap" event we can hook onto, but we can manually check for a tap or a double tap. The code would look something like

    var tapped=false
    $("#mini-cart .dropdown-toggle").on("touchstart",function(e){
        if(!tapped){ //if tap is not set, set up single tap
          tapped=setTimeout(function(){
              tapped=null
              //insert things you want to do when single tapped
          },300);   //wait 300ms then run single click code
        } else {    //tapped within 300ms of last tap. double tap
          clearTimeout(tapped); //stop single tap callback
          tapped=null
          //insert things you want to do when double tapped
        }
        e.preventDefault()
    });
    

    Demo

    This should work on any touch enabled browser.

    An alternative, though a bit heavy for just this, is to use Hammer.js. It's a really nice library for handling touch events. And it also aggregates mouse and touch events into one type of event. For example, for tap and double tap it'll essentially be

    Hammer(el).on("tap", function() {
        //singletap stuff
    });
    Hammer(el).on("doubletap", function() {
        //doubletap stuff
    });
    

    This also works for mouse events too, which might not be what you want. And it is a bit overkill if it's just for this. But if you plan to do more touch related stuff, I would recommend using this library.

提交回复
热议问题