IEのScript.aculo.us Sortable onUpdate問題[終了]
-
11-07-2019 - |
質問
script.aculo.usソート可能オブジェクトを使用しているプロジェクトに取り組んでいます。
FirefoxとChromeでは素晴らしく高速に動作しますが、IEでは要素をドロップするたびに非常に遅くなります。
少し確認したところ、IEでは" onUpdate"コールバック関数は、ドロップするたびに約8回呼び出されます。通常、ソート可能なコンテナ(宛先と起点)ごとに1回だけ呼び出されることになっています。
私のコールバック関数はいくつかの要素のサイズを変更し、それらの要素にグラフを描画するため、各呼び出しに含まれる計算はかなりのものです。
IEでこの問題を引き起こしている可能性のあるもの、または修正方法を知っている人はいますか?
編集:
問題は、ドラッグされたときに何度もトリガーされることではなく、ソート可能な順序が変更されたときに、ドラッグが停止した場合でも onUpdate
関数が起動されることです。終わりません。 onUpdate
は実際には onChange
コールバックのように機能しているようですが、IEのみです。
解決
タイマーの使い方が間違っていると思います。タイムアウト後にタイマーを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)
}
他のヒント
script.aculo.usについては知りませんが、イベントのサイズを変更すると、IEはサイズ変更の直後だけでなく(他のほとんどのブラウザが行うように)イベントを連続的に発火します。それ以外の場合は、サイズ変更などの複数回実行されます。
同様の問題に使用したトリックの1つは、イベントが発生したときに「アクション」を設定することです。タイムアウト(1/4秒など)後に発生しますが、新しいイベントが「クリア」されるたびに発生します。タイムアウト...だからあなたが得るのは「最後」だけですイベント。
script.aculo.usが実際にトリガーするものを誰かが知っている場合、より明確な詳細を提供できる可能性があります。