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

_.throttle用于通过“限制”函数来防止函数运行太多次,因此它每 X ms 只运行一次。您可能想要使用函数队列,在延迟的计时器上出列。

像这样的东西:

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 回答