问题:鼠标移动并不总是在触摸时被感应到。
我目前正在使用 jQuery UI 拖动和 jQuery Touch Punch 将触摸事件转换为鼠标事件。在桌面浏览器上一切正常。
我可以让它执行可拖动的“开始”功能,但它并不总是启动可拖动的“拖动”功能。我在各处设置了侦听器以查看发生了什么,并且在启动功能运行后它不显示任何鼠标移动 - 无论是在窗口中还是在父文档中。滚动,然后打开(通常会被 preventDefault(); 阻止)。我必须移开手指并将其放回原处才能继续拖动。但是,如果我放置某些 e.preventDefault()s,我可以在启动可拖动对象的第三次或第四次时使拖动操作正常(换句话说,从初始滑动开始)。
这是一个精简版:
$(window).mousedown(function(e){
drag(e);
});
function drag(e){
$iframefix.show();
$draggable.draggable({
start: function(e, ui){
// this function runs well, but at the end of it, I don't seem to register
// any mouse movements in the document or window as I move my finger
// around, and even using .trigger('mousemove') does not register an event.
},
drag: function(e, ui){
}
});
$draggable.trigger(e);
}
我的猜测是它与鼠标事件起源于 iframe 的事实有关,并且当使用 .trigger() 时,jQuery 可能会规范化事件,因此它正在回看窗口(e.originalEvent)。也许这让 jQuery 触摸打孔无法感知鼠标移动(也许它认为它是点击)。
这是 jQuery Touch Punch - 它是一个包含 jQuery 鼠标事件的小脚本:
https://raw.github.com/furf/jquery-ui-touch-punch/master/jquery.ui.touch-punch.js
或者,也许这是使用 e.preventDefault() 或 e.stopPropagation 或在我不看的区域中返回 false。
无论如何,在拖动启动后,有些东西阻止它感应我的手指四处移动。