通过触摸将iframe中的拖动事件触发到父级

时间:2012-10-14 03:17:00

标签: jquery jquery-ui iframe touch jquery-ui-draggable

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

我目前正在使用jQuery UI拖动和jQuery Touch Punch将触摸事件转换为鼠标事件。在桌面浏览器上一切正常。

我可以让它执行可拖动的'start'函数,但它并不总是启动可拖动的'drag'函数。我有听众设置到处查看发生了什么,并且在启动功能运行后它没有显示任何鼠标移动 - 在窗口和父文档中。滚动,然后打开(通常由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。

无论如何,有些事情阻止它在感知拉杆后感觉我的手指移动。

0 个答案:

没有答案