0

我正在开发一个使用 script.aculo.us 可排序对象的项目。

它在 Firefox 和 Chrome 中运行良好且快速,但在 IE 中,每当我删除一个元素时,它的速度非常慢。

我做了一些检查,结果发现在 IE 中,“onUpdate”回调函数在每次下降时都会被调用大约 8 次。通常,每个可分类容器(目的地和来源)应该只调用一次。

由于我的回调函数会调整一些元素的大小并在这些元素中绘制图形,因此每次调用所涉及的计算量相当可观。

有谁知道在 IE 中可能导致此问题的原因,或如何解决?

编辑:我注意到问题不在于它在拖动时触发了很多次,问题在于onUpdate当可排序的顺序发生变化时该函数被触发,即使拖动还没有结束。似乎它onUpdate实际上像onChange回调一样工作,但只有 IE。

4

2 回答 2

1

我不知道 script.aculo.us 但在调整事件大小时,IE 会连续触发事件,而不仅仅是在调整大小之后(就像大多数其他浏览器一样),因此我猜测 onUpdate 是基于其他东西在内部触发的多次触发(如调整大小)。

我用于类似问题的一个技巧是,当事件触发时,将“动作”设置为在超时(例如 1/4 秒)后发生......但是每个触发的新事件都会“清除”超时......所以所有你得到的是“最后一个”事件。

如果有人知道 script.aculo.us 实际触发的是什么,我也许可以提供更明确的细节。

于 2008-11-25T23:09:09.063 回答
1

我认为您使用计时器的方式是错误的。您只希望计时器在超时后触发一次。如果在超时期间仍然发生某些事情,您需要重置计时器并重新开始,否则您只是在延迟您最初正在做的事情。

var timer1
Sortable.create("fList", {constraint:false,onChange:function(){triggerUpdate()}})

function triggerUpdate() {
    clearTimeout(timer1)
    window.setTimeout(function(){showList()},800)
}
function showList() {
    var now = new Date()
    alert(now)

}
于 2008-11-26T14:28:07.397 回答