Javascript 什么';使用jQuery处理移动设备上的长按和双击事件的最佳方法是什么?
我正在寻找添加“doubletap”和“longtap”事件以用于jQuery的live()、bind()和trigger()的最佳解决方案。我推出了自己的快速解决方案,但有点问题。有没有人有他们推荐的插件,或者有他们自己想要共享的实现?有人向jQuery报告它是一个bug,但由于双击与双击不同,它的优先级不高。然而,策划人Raul Sanchez为doubletap编写了一个jquery解决方案,您可能可以使用它! ,在移动Safari上工作 它易于使用:Javascript 什么';使用jQuery处理移动设备上的长按和双击事件的最佳方法是什么?,javascript,jquery,iphone,events,mobile,Javascript,Jquery,Iphone,Events,Mobile,我正在寻找添加“doubletap”和“longtap”事件以用于jQuery的live()、bind()和trigger()的最佳解决方案。我推出了自己的快速解决方案,但有点问题。有没有人有他们推荐的插件,或者有他们自己想要共享的实现?有人向jQuery报告它是一个bug,但由于双击与双击不同,它的优先级不高。然而,策划人Raul Sanchez为doubletap编写了一个jquery解决方案,您可能可以使用它! ,在移动Safari上工作 它易于使用: $('selector').doub
$('selector').doubletap(function() {});
-编辑-
还有一个longtap插件!你可以在iPad或iPhone上看到一个演示。这里是一个非常基本的功能大纲,你可以在longtap上进行扩展:
$('#myDiv').mousedown(function() {
var d = new Date;
a = d.getTime();
});
$('#myDiv').mouseup(function() {
var d = new Date;
b = d.getTime();
if (b-a > 500) {
alert('This has been a longtouch!');
}
});
时间长度可由mouseup函数中的if
块定义。这可能会在一笔好交易的基础上得到加强。我为那些想玩它的人准备了一套
编辑:我刚刚意识到,这取决于用手指触摸触发
mousedown
和mouseup
。如果不是这样的话,那么用任何合适的方法来代替。。。我对移动开发不太熟悉。rsplak的回答很好。我检查了这个链接,它确实工作得很好
但是,它只实现了doubletap jQuery函数
我需要一个可以绑定/委托的自定义双击事件。i、 e
$('.myelement').bind('doubletap', function(event){
//...
});
如果您正在编写一个backbone.js风格的应用程序,其中有很多事件绑定,那么这一点更为重要
所以我把劳尔·桑切斯的作品变成了“jQuery特别活动”
看看这里:可能对某人有用。只需使用一个。然后您可以编写如下代码:
canvas
.hammer({prevent_default: true})
.bind('doubletap', function(e) { // Also fires on double click
// Generate a pony
})
.bind('hold', function(e) {
// Generate a unicorn
});
它支持点击、双击、滑动、按住、变换(即捏)和拖动。当发生等效的鼠标操作时,触摸事件也会触发,因此不需要编写两组事件处理程序。哦,如果你想像我一样以jquerysh的方式编写,你需要jQuery插件
我写了一个非常类似的答案,因为它也非常流行,但回答不太好。您也可以使用它,它也支持事件委派:
对于龙头:
// direct event
$('selector').on('press', function() { /* handle event */ });
// delegated event
$('ancestor').on('press', 'selector', function() { /* handle event */ });
// direct event
$('selector').on('doubletap', function() { /* handle event */ });
// delegated event
$('ancestor').on('doubletap', 'selector', function() { /* handle event */ });
对于双击:
// direct event
$('selector').on('press', function() { /* handle event */ });
// delegated event
$('ancestor').on('press', 'selector', function() { /* handle event */ });
// direct event
$('selector').on('doubletap', function() { /* handle event */ });
// delegated event
$('ancestor').on('doubletap', 'selector', function() { /* handle event */ });
基于最新的jquery文档,我编写了doubletap事件
功能项TapeEvent(事件){
如果(event.type=='touchend'){
var lastTouch=$(this).data('lastTouch')| |{lastTime:0},
现在=event.timeStamp,
delta=现在-lastTouch.lastTime;
如果(增量>20和增量<250){
if(lastTouch.timerEv)
clearTimeout(lastTouch.timerEv);
返回;
}否则
$(this.data('lastTouch',{lastTime:now});
$(this).data('lastTouch')['timerEv']=setTimeout(函数(){
$(this.trigger('touchend');
}, 250);
}
}
$('selector').bind('touchend',ItemTapeEvent);
您的手机是什么样子的?也许我们可以修复它?doubletap插件不会检查位置。如果你把手指放在不同的地方,那么它不应该算作双击。如果选择器上出现多点触控手势,该插件的效果会很差。不要使用它+0没有否决投票,因为从技术上讲它是有效的。。这就是说,它不能很好地工作,也不能与on()
或delegate()
等一起工作。这是一个问题,但我不向任何人推荐。最好不要依赖于doubletapdoubletap
。在Android上有实现吗?非常感谢。值得注意的是,要实现这个跨平台,您必须同时绑定到dblclick
和doubletap
:$('.myelement').bind('dblclick doubletap',function(event){/*Stuff*/})基于对公认答案的厌恶,我选择了Ngryman的jQuery手指。它工作得很好。谢谢,伙计。这是我能找到的唯一一个使用jquery插件双击移动设备的解决方案。