我有以下 jquery 事件处理函数:
$('.target').on('dblclick', function() {
//respond to double click event
});
我的问题是此事件处理程序在触摸设备(iPhone、iPad...)上不起作用。任何人都可以推荐一个可靠的替代方案dblclick
,可以在触摸设备上运行并且仍然允许在全尺寸设备上舒适地双击使用吗?
我有以下 jquery 事件处理函数:
$('.target').on('dblclick', function() {
//respond to double click event
});
我的问题是此事件处理程序在触摸设备(iPhone、iPad...)上不起作用。任何人都可以推荐一个可靠的替代方案dblclick
,可以在触摸设备上运行并且仍然允许在全尺寸设备上舒适地双击使用吗?
我最终构建了一个可以在移动设备和桌面设备上运行的自定义双击功能:
var touchtime = 0;
$(".target").on("click", function() {
if (touchtime == 0) {
// set first click
touchtime = new Date().getTime();
} else {
// compare first click to this click and see if they occurred within double click threshold
if (((new Date().getTime()) - touchtime) < 800) {
// double click occurred
alert("double clicked");
touchtime = 0;
} else {
// not a double click so set as a new first click
touchtime = new Date().getTime();
}
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<div class="target">Double click me</div>
或者,这里是JSfiddle 演示。
将此添加到您的 index.html
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"/>
我发现移动缩放功能会摆脱 Jquery 的 dblclick。基本上它说你的视口不会有效地改变关闭缩放。这适用于我的 Nexus 5 运行 Chrome。
您可以在元素上绑定多个事件侦听器,并tap
为触摸设备使用 jQuery事件。
$( ".target" ).on({
dbclick: function() {
//do stuff
}, touch: function() {
//do the same stuff
}
});
感谢您的解决方案 - 我所做的唯一一件事就是添加一个超时,以便它们可以被视为单独的事件
var touchtime = 0;
var delay = 800;
var action = null;
$(".target").on("click", function() {
/*Double Click */
if((new Date().getTime() - touchtime) < delay){
clearTimeout(action)
alert('dbl');
touchtime=0;
}
/* Single Click */
else{
touchtime = new Date().getTime();
action = setTimeout(function(){
alert('single');
},delay);
}
}));
尽管我还没有测试过,但也可能值得将以下内容添加到任何 HTML 的标题部分<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"/>
:“user-scalable=no”或不“user-scalable=no”
我知道这个问题已经得到回答,但我认为值得把我一直使用的解决方案放在一边,干杯:
var doubleClicked = false;
$('.target').on('click', function() {
if (doubleClicked) {
//do what you want to do on double click here
}
doubleClicked = true;
setTimeout(() => {
doubleClicked = false;
}, 300);
});