私は、複数回のスクロールイベントを防止しようとしています。 250msで1つのイベントのみ。このため私は以下のインターネットでデバウンス機能を見つけました。しかし、私はそれを正しく使うことができませんでした。なにが問題ですか?関数を返すdebounce
機能以来スクロールイベントで複数の火災を防ぐ方法は?
function debounce(func, wait, immediate) {
var timeout;
return function() {
var context = this, args = arguments;
var later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
};
// my code..
$(window).on('scroll', function (e) {
debounce(function() {
// The stuff below doesn't work.
var scrollTop = $(window).scrollTop();
if (scrollTop > 50) {
$('.title').addClass('fixedPosition');
} else {
$('.title').removeClass('fixedPosition');
}
}, 250);
});
ウィンドウオブジェクトにミューテックスを追加し、setTimeout関数を使用して250msごとに非同期にリリースします。 –
ラップを削除します'on'のハンドラ引数として__call__' debouce'だけを使用します。 – Teemu
議論された[ここ](http://stackoverflow.com/questions/39272182/optimize-scroll-speed-for-internet-explorer-11/39273882#39273882)と同様です。 return => 'debounce(function(){/ ** /}()、250); –