这有点难以解释,所以我在这里设置了一个简化的测试用例:http: //jsfiddle.net/5Z6h6/1/。基本上发生的事情是我将 jQuery UI 传递.draggable
给 iFrame 的内容,并使用 jQuery UI 的内置 iframeFix 来避免 iFrame 捕获鼠标事件的问题。
这很好用,除了在 Firefox 中,点击和拖动似乎不再起作用;相反,您必须单击、释放、拖动,然后再次单击以放置。这是预期的行为吗?有没有解决的办法?
任何帮助深表感谢。
这有点难以解释,所以我在这里设置了一个简化的测试用例:http: //jsfiddle.net/5Z6h6/1/。基本上发生的事情是我将 jQuery UI 传递.draggable
给 iFrame 的内容,并使用 jQuery UI 的内置 iframeFix 来避免 iFrame 捕获鼠标事件的问题。
这很好用,除了在 Firefox 中,点击和拖动似乎不再起作用;相反,您必须单击、释放、拖动,然后再次单击以放置。这是预期的行为吗?有没有解决的办法?
任何帮助深表感谢。
升级您的 Firefox 版本并再次检查。
魔术是在 mousedown 开始时轻弹 iframe:
$iframe.css('display', 'none');
然后设置可拖动和触发事件:
$draggable.trigger(event);
然后再次显示 iframe:
$iframe.css('display', 'block');
该功能应该运行得足够快,所以你不应该看到任何闪烁 - 我反复试验才找到这个,但这解决了我在 Firefox 中的 iframe 问题。
这花了我很长时间才弄清楚,这里发布的解决方案不起作用,而且它似乎仍然是 jQuery 中的一个问题。
问题是在 Firefox 中,mousedown、mouseup 和 mousemove 事件似乎不会从 iframe 冒泡到父文档。
我使用的解决方法是这样的:
// From parent document
// Get iframe 'document'
var $iframe = $('iframe').$el.content();
// Then bind listeners for events, and trigger them on parent document
$iframe.on({
mousemove: function(e){
$(document).trigger(e);
},
mousedown: function (e) {
$(document).trigger(e);
},
mouseup: function (e) {
$(document).trigger(e);
}
});
希望这可以节省人们一些时间。