TL;博士:
如何将三个“触摸”浏览器事件与延迟结合起来以模拟“长按”事件并使其可供 jQuery 附加到任何适当的 DOM 元素?
完整问题
由于我相信 iPad 和其他触摸屏设备最可靠地仅触发 touchstart、touchmove 和 touchend 事件,我猜想需要一个复杂程度或其他级别的框架来对手势、长按和多个事件等事件做出反应触及。
我还没有准备好在我当前的项目中添加一个移动框架,所以为此,我添加了一些代码,这些代码似乎在模拟“长”按下时效果很好,并且允许有人来并触发预定义的处理程序或为此类事件添加额外的处理程序:
var touchTimeout = null;
var $element = null;
$('div#SomeIdOnADIVElementOrTwo')
.on('touchstart', function(){
$element = $(this);
//not sure if this is absolutely necessary, but it was based off an Internet resource found when it didn't work like I wanted it to - and it works, so...
touchTimeout = setTimeout(
function($element){
return function(){
$($element).trigger('longpress');
};
}($element), 1000
);
})
.on('touchend touchmove', function(){
clearTimeout(touchTimeout);
})
.on('longpress', function(){
$(this).dblclick();
});
然而,这目前仅限于我在第一行传递给原始 jQuery 全功能调用的任何选择器或 jQuery 对象(在我的例子中,是一个 id 的 div SomeIdOnADIVElementOrTwo
)。我想做的是将三个事件“touchstart”、“touchmove”和“touchend”(以及延迟/超时等)定义为标准“事件”,有人可以在任何“可触摸”上“处理” " DOM 对象。
这就像将我的选择器更改为一样简单*
吗?我很确定这在概念上会起作用,但我不禁认为这在具有大量元素的页面上很可能无法管理 - 或者我可能对事件处理程序的注册方式感到困惑?.longPress()
用一个函数(与.click()
and.dblClick()
函数相同)扩展 jQuery 可能会更好吗?这是不可行的还是不可能的?它非常简单,我错过了什么吗?