2016-09-17 26 views
0

我使用this Codrops Blueprint創建報價旋轉器。我修改轉子有一個下一個按鈕,搭載代碼如下:我在使用報價旋轉器上的clearTimeout()時遇到問題

_startRotator: function() { 

     if (this.support) { 
      this._startProgress(); 
     } 

     var timeout = setTimeout($.proxy(function() { 
      if (this.support) { 
       this._resetProgress(); 
      } 
      this._next(); 
      this._startRotator(); 
     }, this), this.options.interval); 

     $(".testimonial-next").click($.proxy(function() { 
      clearTimeout(timeout); 
          if (this.support) { 
       this._resetProgress(); 
      } 
      this._next(); 
      this._startRotator(); 

     }, this)); 
    }, 

我加入下面的setTimeout函數的。點擊功能,並增加了var到setTimeout函數。

當.testimonial-next被點擊時,轉子的定時器被重置,並且定時器中的代碼被立即執行。據我所知,計時器重啓自己,所以我不應該添加代碼來做到這一點。

the website where this is put to use(請參閱「證明書」部分),但是,似乎有問題。應該有五個引號,按照Kim,Lynn,Shannon,Jennifer和Chris的順序。如果定時器運行時沒有中斷,一切都按預期工作。如果單擊下一步按鈕,某些引號似乎會被跳過。其他時候,報價停止旋轉或高速隨機旋轉。

我在做什麼錯?

回答

0

您的按鈕點擊處理程序一次又一次地附加到按鈕上,使點擊結果在同一代碼的幾次執行中。

爲了解決這個問題,你最好將這段代碼移出_startRotator函數,並將它移動到只執行一次的地方。

這樣,當你點擊時,將只有一個處理程序被執行。

不太好,但也有解決方案,將是保持它在哪裏的代碼,但總是先刪除任何現有的點擊處理程序,重新插入前:

$(".testimonial-next").off('click').on('click', $.proxy(function() { 
     // etc... 

但是,這確實是一個醜陋解。嘗試移動代碼。

+0

謝謝。我完全不熟悉jQuery,並且很難理解這段代碼如何工作。當我執行[this](http://pastebin.com/raw/s5B3E9fg)時,整個文件無法運行並打破了推薦。 – Joshua

+0

在'_skip'方法中附加點擊處理程序是沒有意義的。把它放在構造函數代碼中。例如,如果'_init()'是您創建的方法,則將其放在那裏。 – trincot

+0

A設法移動它。謝謝您的幫助。 – Joshua

相關問題