古いタイトル: javascript のウィンドウ サイズ変更イベントの setTimeout スロットルが ie7 で継続的に発生する
次のスクリプトがあります。
jQuery(document).ready(function(){
throttleTest();
});
function throttleTest() {
var throttleTimer,
testCount = 1;
jQuery(window).on({
"resize": function(){
clearTimeout(throttleTimer);
throttleTimer = setTimeout(function() {
jQuery("ul.testList").prepend("<li>Prepended list item number: " + testCount + "</li>");
testCount++;
}, 500);
}
});
};
そして、次のHTML :
<ul class="testList">
</ul>
setTimeout スロットル テクニックを使用すると、ユーザーがブラウザのサイズ変更を 500 ミリ秒停止した後、リスト アイテムを testList ul の前に追加する必要があります。基本的に、setTimeout コードは、設定される前に clearTimeout が設定されているため、ブラウザーのサイズ変更ごとに 1 回だけ実行されます。この手法により、ユーザーがブラウザのサイズを変更するたびに何十回も発生する可能性のあるサイズ変更イベントごとではなく、必要なときにのみコードを起動できます。
これは、ie7 を除くすべてのブラウザーで機能します。奇妙なことに ie7 では、コードは引き続き実行され、リスト項目を ul の先頭に追加するのを停止します。
ここでデモをセットアップしました: http://jsfiddle.net/cQRjp/
ie7 を見ると、問題が表示されます。これがie7で失敗する理由を誰かが知っていますか?
編集番号:1:
ウィンドウのサイズを変更すると、li 要素がページの ul 要素の前に追加され、カウンターがインクリメントされるように、コードを削除しました。それでおしまい。
これは、ie7 がサイズ変更イベントを解釈する方法に問題があることを示しており、スロットル タイマーとは関係ありません。ページの先頭に li アイテムを追加すると、ie7 でサイズ変更イベントがトリガーされるようです。したがって、サイズ変更は継続的に発生します。ここで新しいデモをセットアップしました: http://jsfiddle.net/gnKsE/ 警告 このリンクは ie7 ブラウザーをクラッシュさせます。
この問題に対して私が考えることができる 1 つの解決策は、サイズ変更イベントがトリガーされた直後にオフにし、その中でコードを実行した後に再度設定することです。そのようです:
jQuery(document).ready(function(){
functionName();
});
function functionName() {
var throttleTimer,
testCount = 1;
function turnOnResize() {
jQuery(window).on({
"resize.anyname": function(){
jQuery(window).off(".anyname");
jQuery("ul.testList").prepend("<li>Resize event: " + testCount + "</li>");
testCount++;
setTimeout(function() {
turnOnResize();
}, 50);
}
});
}
turnOnResize();
};