0

问题:鼠标移动并不总是在触摸时被感应到。

我目前正在使用 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。

无论如何,在拖动启动后,有些东西阻止它感应我的手指四处移动。

4

0 回答 0