【问题标题】:Internet Explorer 9 drag events block event queueInternet Explorer 9 拖动事件阻止事件队列
【发布时间】:2013-06-01 10:31:35
【问题描述】:

我正在做一个项目,如果有一个拖放可重新排序的列表会很酷。我使用 HTML 5 Drag and Drop 轻松完成了这项工作。我的问题是该列表可能很长,因此它实际上是分页或“滚动加载”或您想要调用的任何名称。这只是通过响应滚动事件并通过 AJAX 加载更多数据来工作。

所以列表具有“凹凸滚动”功能,我通过在视口的顶部和底部放置两个通常不可见的 div 来实现这一点。当他们收到一个拖动事件时,他们只是增加或减少视口的滚动顶部。很简单。在小提琴中,我给了它们一个背景,这样你就可以看到它们。如果您尝试在 FF 或 Chrome 中使用 fiddle,您可以看到随着 ajax 调用完成 UI 更新。这不会发生在 IE 上。

dojo.byId("bumpScrollDown").connect("dragover", function(bump) {
    wrapper.scrollTop -=  20;
    dojo.xhrGet({url: "/echo/json/"}).then(function() {
        // THIS WILL NEVER FIRE on IE 9 UNTIL THE DRAG
        // OPERATION IS COMPLETED
        dojo.byId("log").innerHTML += "callback... ";
    }); 
});

问题是 IE 9 上的拖动似乎阻塞了事件循环,所以什么也没有发生 - 只要有拖动,ajax 回调、超时等就不会触发。这似乎会搞砸很多事情,包括从 dragover 等开始的动画。

有谁知道我怎样才能让它工作?我可以取消拖动事件并重新开始吗?如果我能以某种方式取消它以允许 ajax 回调触发,则调用 dragDrop() 将再次开始拖动。

您可以在小提琴中看到,由拖动事件触发的所有 AJAX 调用都不会调用它们的回调,直到拖动结束。这不会发生在 chrome 或 FF 上。

http://jsfiddle.net/stevendwood/5VWZk/4/

更新:在 IE10 上效果更好

【问题讨论】:

  • 因此您可以取消拖动事件,这似乎结束了取消阻止事物和事件开始触发的 dragDrop。但如果有人有任何其他想法,我将不胜感激

标签: javascript html internet-explorer drag-and-drop


【解决方案1】:

我没有 IE9 可以测试,但是...

我在这里可能完全错了,但是,您是否测试过它是否与此代码中的 stopEvent 位有关:

dojo.connect(wrapper, "dragover", function(ev) {
    if (!dojo.hasClass(ev.target, "noDroppy")) {
        dojo.addClass(ev.target, "dragover");
        //dojo.stopEvent(ev);
    }
});

否则:

我最近在 jQuery 中编写了类似的代码。

我的解决方案是检查拖动是否悬停在凸块上,在拖动事件本身内部,而不是在凸块上单独悬停事件。

您甚至可以检查在颠簸上向下或向上拖动的距离以调整滚动速度。

希望这会有所帮助。

【讨论】:

  • 感谢您的回复 - 但在 Dragover 上的 stopEvent 是您告诉 HTML5 dnd API 您允许放置的方式,所以如果我删除它,我也不能接受任何放置事件 - 它无论如何都没有任何区别。您在哪里附加了您上面提到的拖动事件?
  • 在 jQuery 中,我可以使用 dragstart、dragging 和 dragend 来初始化一个拖动对象。
  • 是否可以将 noDroppy 类添加到凹凸并在代码中扩展 dragover 事件以进行滚动,还是只触发一次?
  • bumps 有自己的 nodroppy 等价物——它们不会取消事件并监听拖拽。 “nodroppy”只是为了尝试在列表中包含一个不能接受丢弃的东西。 ondragover 在您拖动时会不断触发...为了清楚起见-我相信您在哪里放置 setTimeout 或某些 AJAX 调用都无关紧要-关键是,如果您在拖动事件中进行操作,则在拖动完成之前它不会被触发在 IE9 上,无论经过多长时间
猜你喜欢
  • 2013-06-10
  • 1970-01-01
  • 1970-01-01
  • 2011-07-05
  • 1970-01-01
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
  • 2014-05-01
相关资源
最近更新 更多