我正在开发一个项目,我正在使用script.aculo.us可排序对象。
它在Firefox和Chrome中运行良好且快速,但在IE中,每当我删除元素时它都非常慢。
我做了一些检查,结果发现在IE中,每次丢弃时,“onUpdate”回调函数被调用大约8次。通常情况下,每个可排序的容器(目的地和原点)只能被调用一次。
由于我的回调函数调整了一些元素的大小并在这些元素中绘制图形,因此每次调用所涉及的计算都相当可观。
有谁知道IE中可能导致此问题的原因,或者如何修复它?
编辑:
我注意到问题并不在于它被拖动时多次触发,问题是当可排序的顺序发生变化时onUpdate
函数被触发,即使拖动还没有结束。似乎onUpdate
实际上像onChange
回调一样工作,但只有IE。
答案 0 :(得分:1)
我不知道script.aculo.us但是在调整事件大小时,IE不断激发事件,而不仅仅是在调整大小之后(就像大多数其他浏览器那样),因此我猜测onUpdate是基于某些东西内部触发的其他是多次开火(如调整大小)。
我用于类似问题的一个技巧是,当事件触发时,将“动作”设置为在超时后发生(例如1/4秒)......但是每个新事件触发“清除”超时。所以你得到的就是“最后”的事件。
如果有人知道script.aculo.us实际触发了什么,我可能会提供更明确的细节。
答案 1 :(得分: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)
}