我是靠谱客的博主 谨慎钻石,最近开发中收集的这篇文章主要介绍html单击拖动和双击,jQuery上的“双击”事件(用于移动设备的dblclick),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我有以下jquery事件处理功能:$('.target').on('dblclick', function() {

//respond to double click event

});

我的问题是此事件处理程序无法在触摸设备(iPhone,iPad ...)上运行。 谁能推荐dblclick的可靠替代品,该替代品可在触摸设备上运行,并且仍然允许在全尺寸设备上舒适地双击使用?

9 个回复:

===============>>#1 票数:18 已采纳

我最终构建了一个自定义双击功能,该功能将在移动设备和台式机上都可以使用:

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(); } } });

Double click me

===============>>#2 票数:3

您可以在元素上绑定多个事件侦听器,并将jQuery的tap事件用于触摸设备。$( ".target" ).on({

dbclick: function() {

//do stuff

}, touch: function() {

//do the same stuff

}

});

===============>>#3 票数:3

将此添加到您的index.html

我发现移动缩放功能会抛弃Jquery的dblclick。 基本上,它说您的视口不会有效改变以关闭缩放。 这适用于运行Chrome的Nexus 5。

===============>>#4 票数:1

@JRulle的标记答案似乎仅适用于单个对象,如果您有许多具有相同类的实例,则将它们视为单个对象,请参见示例

我的解决方案似乎在这种情况下有效

var touchtime = 0; $('.target').on('click', function() { if (touchtime == 0) { touchtime = new Date().getTime(); } else { if (((new Date().getTime()) - touchtime) < 800) { alert("double clicked"); touchtime = 0; } else { touchtime = 0; } } });

click me!

then click me!

click link

===============>>#5 票数:1

感谢您的解决方案-我唯一要做的就是添加一个超时,以便可以将其视为单独的事件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 为: ” user-scalable = no“或不” user-scalable = no“

===============>>#6 票数:1

具有自己的doubleclick计数器的多个目标。 可接受的解决方案有2个错误,在这里已修复:如果单击目标并单击外部,然后在800毫秒内再次单击目标,则将触发doubleclick事件。

如果您有多个目标,请在800毫秒内单击其他目标,然后会触发doubleclick事件。

$(document).on("click", function(e) { var MAX_DELAY_IN_MS = 800; var current_time = new Date(); var targets = $(".target"); if ((typeof last_target == "undefined") || (last_target == 0)) { last_target = e.target; last_click = current_time; } else { if ((last_target == e.target) && ((targets.is(e.target) == true) || (targets.has(e.target).length !== 0)) && (current_time - last_click < MAX_DELAY_IN_MS)) { alert("double clicked"); } last_target = 0; last_click = 0; } });div{display:inline-block; width:30px; height:30px; margin:5px;} .target{background-color:lime;} .no_target{background-color:orange;}

===============>>#7 票数:0

我对上面的代码进行了改进,单击后未检测到双击:var touchtime = 0;

$(".target").on("click", function() {

if (((new Date().getTime()) - touchtime) < 500) {

alert("double clicked");

}

touchtime = new Date().getTime();

});

此代码检测所有双击。 我还将触摸时间减少到500ms(标准的doubleclick-time)。

===============>>#8 票数:-1

就这样...在CoffeeScript中onDblClick = -> "...your function to be fired..."

dbl_click = null

$(element).on 'mousedown', ->

onDblClick() if dbl_click

dbl_click = true

setTimeout () ->

dbl_click = false

, 250

===============>>#9 票数:-2

您需要在函数末尾输入“ return false”,如下所示var touchtime = 0;

$('.dbclickopen').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

touchtime = 0;

window.location = this.href;

} else {

//not a double click so set as a new first click

touchtime = new Date().getTime();

}

}

return false;

});

最后

以上就是谨慎钻石为你收集整理的html单击拖动和双击,jQuery上的“双击”事件(用于移动设备的dblclick)的全部内容,希望文章能够帮你解决html单击拖动和双击,jQuery上的“双击”事件(用于移动设备的dblclick)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部