Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 什么';使用jQuery处理移动设备上的长按和双击事件的最佳方法是什么?_Javascript_Jquery_Iphone_Events_Mobile - Fatal编程技术网

Javascript 什么';使用jQuery处理移动设备上的长按和双击事件的最佳方法是什么?

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

我正在寻找添加“doubletap”和“longtap”事件以用于jQuery的live()、bind()和trigger()的最佳解决方案。我推出了自己的快速解决方案,但有点问题。有没有人有他们推荐的插件,或者有他们自己想要共享的实现?

有人向jQuery报告它是一个bug,但由于双击与双击不同,它的优先级不高。然而,策划人Raul Sanchez为doubletap编写了一个jquery解决方案,您可能可以使用它! ,在移动Safari上工作

它易于使用:

$('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()
等一起工作。这是一个问题,但我不向任何人推荐。最好不要依赖于doubletap
doubletap
。在Android上有实现吗?非常感谢。值得注意的是,要实现这个跨平台,您必须同时绑定到
dblclick
doubletap
$('.myelement').bind('dblclick doubletap',function(event){/*Stuff*/})