5

関数をスクロールにバインドし、マウスホイールを 1 回スクロールすると、関数は 7 回または 8 回実行されます。マウスホイールを1回スクロールしたときに1回だけ実行したいのですが、これは可能ですか? 私はこのコードを使用します:

$(document).ready(function () {
    $(window).bind('scroll', function() {
        alert("Scroll.");          
    }   
    });
});
4

5 に答える 5

6

試す

$(document).ready(function () {
    var timerId;
    $(window).bind('scroll', function() {
        clearTimeout(timerId)
        timerId = setTimeout(function(){
            alert("Scroll.");          
        }, 200)
    });
});

デモ:フィドル

于 2013-08-09T10:03:11.640 に答える
4

jQuery スロットル デバウンスプラグインからスロットル機能を使用できます。

$(function() {
    $(window).bind('scroll', $.throttle(100, function() {
        console.log('scroll');
    }));
});
于 2013-08-09T10:13:22.783 に答える
0

スクロールを 1 回だけ検出する場合は、次のようにします。

$(function () {
    var done = false;
    $(window).bind('scroll', function() {
       if (!done){
           alert("Scroll.");
           done = true;
       }
   });
});

ただし、すべてのスクロールイベントを検出したい場合は、答え4のようなものを試してください

于 2013-08-09T11:01:51.090 に答える
0

「1 回」とは、ページ読み込みごとに 1 回という意味であれば、off()メソッドを使用してリスナー内のイベントのバインドを解除できます。 http://api.jquery.com/off/

次のような名前空間イベントの可能性もあります。

scroll.namespace は同じイベントですが、具体的にバインドを解除できます。

$(document).ready(function () {
    $(window).on('scroll.myEvent', function() {
        $(window).off('scroll.myEvent');
        alert("Scroll.");          
    }   
    });
});
于 2013-08-09T10:01:25.650 に答える