1

_.throttle(function() {}, 250)関数はでのみ起動していclickますか? 少し遅れてコードを実行しようとしているのですが、何らかの理由で機能していないようです。

return _.throttle(function() {
    return ( $(this).hasClass('dataRevealed') ) ? $(this).addClass('animated fadeOut') : true;
}, 350);

編集:関数は次のようになります:

Application.CardView.prototype.removeSimilarCards = function(_container) {
    return $(_container).find('[data-identifier="card-view"]').each(function() {
        console.log("first");
        _.throttle(function() {
            console.log("inner");
            return ( $(this).hasClass('dataRevealed') ) ? $(this).addClass('animated fadeOut') : true;
        }, 350);
    });
};
4

3 に答える 3

6

言及されている公式ドキュメントのunderscore#throttleのように、渡される関数は調整されたバージョンでなければなりません。ほら、「スロットリング」は渡される前に実行する必要があります。私はこれを機能させました。:) @closure は上記のコメントでこれについて言及しました。公式文書をもっと読むべきです。

var throttled = _.throttle(updatePosition, 100);
$(window).scroll(throttled);
于 2014-12-02T16:58:41.510 に答える
1

_.throttleXミリ秒ごとに1回だけ実行されるように、関数を「スロットリング」することにより、関数が何度も実行されるのを防ぐために使用されます。おそらく、関数キューを使用して、遅延タイマーでデキューすることをお勧めします。

このようなもの:

Application.CardView.prototype.removeSimilarCards = function(_container) {
    var $ele = $(_container),
        $cards = $ele.find('[data-identifier="card-view"]');

    $cards.each(function() {
        var $this = $(this);
        $ele.queue('func', function(next){
            if($this.hasClass('dataRevealed')){
                $this.addClass('animated fadeOut');
            }
            setTimeout(next, 350);
        });
    });

    setTimeout(function(){
        $ele.dequeue('func');
    }, 350);

    return $cards;
};
于 2012-12-18T16:41:07.227 に答える
0

コードに他の問題がある可能性があります。

完全に機能していることを示すサンプルを作成しました例を参照してください

コードは次のとおりです。

var refTime = +new Date();
var fn = _.throttle(function() {
    console.log((+new Date() - refTime)/1000);
}, 3000);

window.setInterval(fn, 10);
于 2012-12-18T15:50:56.667 に答える