2012-12-18 46 views
0

_.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); 
    }); 
}; 
+0

爲什麼不使用window.setTimeout()出於同樣的目的? – Raul

+0

你怎麼稱呼那個功能?你期望得到延遲執行的結果嗎? – Bergi

+0

這個函數從(或者)到return的返回值在哪裏? –

回答

1

_.throttle用於防止功能運行的次數太多的「節流」它所以它每X毫秒只運行一次。您可能想要使用函數隊列,在延遲的計時器上出隊。

事情是這樣的:

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; 
}; 
+0

直到現在還沒有使用'.queue()':)儘管如此,是否有辦法一次又一次地將它們逐一淡出呢?我這樣做的原因是因爲有一個動畫需要大約350毫秒,只有在這之後我纔會淡出div並將它們從DOM中刪除,所以也許我應該聽取轉場結束? – Roland

+0

不要認爲動畫會在特定時間內完成。你如何做動畫?它可能有一個回調選項,用它來代替。 –

+0

這是CSS動畫,翻轉動畫 – Roland

0

可能在你的代碼中的一些其他問題。

我創建了一個樣本,以表明它正在完美see example

下面是代碼:

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

window.setInterval(fn, 10); 
+0

我不知道會發生什麼問題,因爲我也在其他地方使用'_.debounce',它的工作原理很好 – Roland

+0

對$(this)不起作用有疑問,但那也行得通。檢查:http://jsbin.com/asaxod/8/watch – closure

+0

可能會交換代碼在您的油門到別的東西來調試。 – closure

3

如前所述的正式文件underscore#throttle,在功能上的傳遞必須是一個節流版本。你看,「限制」必須在它被傳入之前被執行。我剛剛得到了這個工作。 :) @closure在上面的評論中提到了這一點。我們應該更多地閱讀官方文件。

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