0

script.aculo.us Sortable オブジェクトを使用しているプロジェクトに取り組んでいます。

Firefox と Chrome では問題なく高速に動作しますが、IE では要素をドロップするたびに非常に遅くなります。

少し調べてみたところ、IE では、ドロップするたびに「onUpdate」コールバック関数が約 8 回呼び出されることがわかりました。通常、ソート可能なコンテナー (宛先と起点) ごとに 1 回だけ呼び出されるはずです。

私のコールバック関数はいくつかの要素のサイズを変更し、それらの要素にグラフを描画するため、各呼び出しに必要な計算はかなりのものです。

IEでこの問題を引き起こしている原因、または修正方法を知っている人はいますか?

編集:問題は、ドラッグされたときに何度もトリガーされることではonUpdateなく、ドラッグが終了していなくても、並べ替え可能な順序が変更されたときに関数が起動されることです。onUpdate実際にはコールバックのように動作しているようですonChangeが、IE のみです。

4

2 に答える 2

1

script.aculo.us についてはわかりませんが、イベントのサイズを変更すると、IE はサイズ変更直後だけでなく (他のほとんどのブラウザーが行うように)、イベントを継続的に発生させます。発射(サイズ変更など)を複数回。

私が同様の問題に使用した1つのトリックは、イベントが発生したときに、タイムアウト(たとえば1/4秒)後に発生するように「アクション」を設定することです...しかし、新しいイベントが発生するたびにタイムアウトが「クリア」されます...だからすべてあなたが得るのは「最後の」イベントです。

script.aculo.us が実際に何をトリガーしているのかを誰かが知っていれば、より明確な詳細を提供できるかもしれません。

于 2008-11-25T23:09:09.063 に答える
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)

}
于 2008-11-26T14:28:07.397 に答える