2014-03-31 34 views
0

我有jQuery函數counter,我需要調用它,當我滾動頁面調用函數一次

$(document).ready(function() { 

    $.fn.counter = function() { 
     $(this).each(function() { 
      var num = $(this).data('counter'); 
      var i = 1, 
       self = $(this).html(i); 
      var interval = setInterval(function() { 
       self.html(++i); 
       if (i >= num) { 
        clearInterval(interval); 
       } 
      }, 100); 
     }); 
    }; 

    $(window).scroll(function() { 
     var height = $(window).scrollTop(); 

     if(height > 300) { 
      $('.counter-1, .counter-2, .counter-3, .counter-4').counter(); 
     } 
    }); 

}); 

問題是,當我再次滾動向上或向下翻頁功能,每一次又一次打來電話,再次。

我試圖用這個代碼

$(document).ready(function() { 

    $.fn.counter = function() { 
     $(this).each(function() { 
      var num = $(this).data('counter'); 
      var i = 1, 
       self = $(this).html(i); 
      var interval = setInterval(function() { 
       self.html(++i); 
       if (i >= num) { 
        clearInterval(interval); 
       } 
      }, 100); 
     }); 
    }; 

    $(window).one('scroll', function() { 
     var height = $(window).scrollTop(); 

     if (height > 300) { 
      $('.counter-1, .counter-2, .counter-3, .counter-4').counter(); 
     } 
    }); 

}); 

但在這種情況下,重新加載頁面功能不叫了。

有沒有辦法在滾動上只調用一次函數,不要再調用它,而是在重新加載頁面後調用它?

回答

6

您應該使用一個名稱空間.on/.off

$(window).on('scroll.custom', function() { 
    var height = $(window).scrollTop(); 

    if (height > 300) { 
     $('.counter-1, .counter-2, .counter-3, .counter-4').counter(); 
     $(window).off('scroll.custom') 
    } 
}); 
+0

是的,我已經嘗試過像成才這樣http://jsfiddle.net/u6pah/2/。但爲什麼你使用'scroll.custom',而不是'scroll'? –

+0

@ truslivii.lev,因爲我不知道你是否有其他'window.scroll'事件。這只是一個安全因爲沒有名字空間,你會刪除窗口上的每個滾動事件。 –

+0

順便說一句,你的小提琴不工作,因爲你沒有滾動條(所以不能真正觸發滾動事件或滾動高於300):http://jsfiddle.net/u6pah/3/ –