Javascript 启用双击事件,同时允许使用Jquery滚动

Javascript 启用双击事件,同时允许使用Jquery滚动,javascript,jquery,touch-event,Javascript,Jquery,Touch Event,我一直在使用Cordova/Phonegap开发移动应用程序,这次我不得不在一个特定表的行上启用双击。我不想使用插件或其他库,因为它只是应用程序的一部分我如何在Javascript上检查双击?所以我搜索了“我如何在Javascript中检查双击?”,瞧!在这篇文章中使用@mfirdaus-answer,我解决了这个问题。但我谈到另一个问题,我不能滚动。因此,我搜索了“如何在检查双击时启用滚动?”并发现答案非常有用 我编译了这两个答案,以创建一个函数,在给定元素上附加双击事件: var tappe

我一直在使用Cordova/Phonegap开发移动应用程序,这次我不得不在一个特定表的行上启用双击。我不想使用插件或其他库,因为它只是应用程序的一部分我如何在Javascript上检查双击?

所以我搜索了“我如何在Javascript中检查双击?”,瞧!在这篇文章中使用@mfirdaus-answer,我解决了这个问题。但我谈到另一个问题,我不能滚动。因此,我搜索了“如何在检查双击时启用滚动?”并发现答案非常有用

我编译了这两个答案,以创建一个函数,在给定元素上附加双击事件:

var tapped = false;
var isDragging = false;

function attachDoubleTap(elem, callbacks) {
    callbacks = callbacks || {};
    callbacks.onSingleTap = callbacks.onSingleTap || function() {}
    callbacks.onDoubleTap = callbacks.onDoubleTap || function() {}

    $(document)
    .on('touchstart', elem, function(e) {

        $(window).bind('touchmove', function() {
            isDragging = true;
            $(window).unbind('touchmove');
        });
    })
    .on('touchend', elem, function(e) {

        var wasDragging = isDragging;
        isDragging = false;
        $(window).unbind("touchmove");
        if (!wasDragging) { //was clicking

            //detect single or double tap
            var _this = $(this);
            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
                  callbacks.onSingleTap(_this);

              },200);   //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
              callbacks.onDoubleTap(_this);

            }
        }
    })
}
$(文档).ready(函数(){
attachDoubleTap(“#画布”{
onSingleTap:function(){
$('.msg').text('single-tap');
},
onDoubleTap:function(){
$('.msg').text('double-tap');
},
onMove:function(){
$('.msg').text('moved');
}
});
});
var=false;
var IsDraging=错误;
函数attachDoubleTap(元素、回调){
回调=回调| |{};
callbacks.onSingleTap=callbacks.onSingleTap | |函数(){}
callbacks.onDoubleTap=callbacks.onDoubleTap | |函数(){}
callbacks.onMove=callbacks.onMove | |函数(){}
$(文件)
.on('touchstart',元素,功能(e){
$(窗口).bind('touchmove',function(){
IsDraging=true;
callbacks.onMove();
$(窗口)。解除绑定('touchmove');
});
})
.on('touchend',元素,功能(e){
var WasDraging=IsDraging;
IsDraging=错误;
$(窗口)。解除绑定(“触摸移动”);
如果(!wasdrading){//正在单击
//检测单抽头或双抽头
var_this=$(this);
如果(!tapped){//如果未设置抽头,则设置单个抽头
点击=设置超时(函数(){
抽头=空
//插入单键点击时要执行的操作
callbacks.onSingleTap(_this);
},200);//等待300毫秒,然后运行单击代码
}否则{//在最后一次点击300毫秒内点击。双击
clearTimeout(点击);//停止单点击回调
抽头=空
//插入双击时要执行的操作
回调。onDoubleTap(_this);
}
}
})
}
正文{
字体系列:arial;
}
#帆布{
宽度:500px;
高度:450px;
背景色:#b0dddf;
边框:1px实心#ccc;
}
味精{
边框:1px实心#ccc;
保证金:0自动;
宽度:300px;
文本对齐:居中;
}

  • 试着敲一下
  • 试着敲两下
  • 尝试点击并拖动

我通常使用一个名为“推荐”的库