Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 下划线的节流功能无法启动_Javascript_Underscore.js - Fatal编程技术网

Javascript 下划线的节流功能无法启动

Javascript 下划线的节流功能无法启动,javascript,underscore.js,Javascript,Underscore.js,_u.throttlefunction{},250函数是否仅在单击时启动?因为我试图以一个小的延迟运行一些代码,但由于某种原因,它似乎不起作用 return _.throttle(function() { return ( $(this).hasClass('dataRevealed') ) ? $(this).addClass('animated fadeOut') : true; }, 350); 编辑:该函数如下所示: Application.CardView.prototype

_u.throttlefunction{},250函数是否仅在单击时启动?因为我试图以一个小的延迟运行一些代码,但由于某种原因,它似乎不起作用

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);
    });
};

代码中可能存在其他问题

我创建了一个示例,以表明它工作得非常完美

代码如下:

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

window.setInterval(fn, 10);
_.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;
};

正如在官方文档中提到的,传入函数必须是限制版本。你看,在传入之前必须执行节流。我刚把它修好@上述评论中提到了这一点。我们应该更多地阅读官方文件

var throttled = _.throttle(updatePosition, 100);
$(window).scroll(throttled);

为什么不将window.setTimeout用于相同的目的呢?请尝试以下操作:返回$\u container.find….each$\u.throttlefunction{},350;。你能告诉我们每个片段应该做什么吗?似乎您误解了throttle的用途。那么,您想延迟调用each中的函数吗?不幸的是,油门在这里是错误的工具。您需要的是一个函数队列。将函数添加到队列中,然后使用timeout.Wait将其出列。您试图如何处理返回的值?您想延迟函数调用,但想返回值?你到底想做什么?我不知道会出什么问题,因为我还在其他地方使用u.debounce,它很好用。我怀疑$this不起作用,但那也起作用。检查:可能是将油门中的代码交换到其他要调试的代码。我刚刚发现这是因为我的每个函数我认为传递给每个油门函数的@raghaw:function handle应该是throttle function直到现在还没有使用“.queue”:但是,有没有办法一次将它们全部淡出,现在一个一个地淡出?我这样做的原因是因为有一个动画大约需要350毫秒,只有在那之后我才会淡出div并将它们从DOM中删除,所以也许我应该听transitionend?不要假设动画会在特定时间内完成。你是如何制作动画的?它可能有一个回调选项,可以使用它。它是CSS动画,一个翻转动画。我从来没有使用过CSS动画,但是你可以尝试transitionend事件。