我使用Waypoints.js當我向下滾動頁面啓動計數器功能的函數:執行一次
$(".counter").waypoint(function() {
$(".counter").count();
}, {offset:"100%"});
一切都很正常,但如果我向上滾動頁面,再次倒在櫃檯,它開始重新計數。我怎樣才能只執行一次計數器功能?
我使用Waypoints.js當我向下滾動頁面啓動計數器功能的函數:執行一次
$(".counter").waypoint(function() {
$(".counter").count();
}, {offset:"100%"});
一切都很正常,但如果我向上滾動頁面,再次倒在櫃檯,它開始重新計數。我怎樣才能只執行一次計數器功能?
不知道是什麼代碼的意思做,但你總是可以用一個標誌變量來控制類似的東西:
var executed = false;
$(".counter").waypoint(function() {
if (!executed) {
executed = true;
$(".counter").count();
}
}, {offset:"100%"});
工作就像一個魅力。 – fnbd 2014-10-06 21:22:12
您可以在事件觸發時第一次設置哨兵值,然後根據該值跳過邏輯。
這裏有一種方法,你可以這樣做:
var count = 0;
$(".counter").waypoint(function() {
if (count > 0) return;
$(".counter").count();
count++;
}, {offset:"100%"});
對不起,這可能是非常糟糕的。我剛剛在stackoverflow的頂部看到你的問題。我不知道你和班上有多少物品。如果你必須計算每個對象,那麼你可以看看jQuery數據。 http://api.jquery.com/jquery.data/ – clankill3r 2014-10-06 21:03:13
我知道這已經有了一個可以接受的答案,但是當前版本的jQuery Waypoint 2.x已經內置了triggerOnce
選項。如果應該執行,則不需要手動保留標誌。
$(".counter").waypoint(function() {
$(".counter").count();
}, {offset:"100%", triggerOnce:true});
這也是同樣的事情上的處理程序結束的航點調用destroy
,使其不會再執行:
$(".counter").waypoint(function() {
$(".counter").count();
$(this).waypoint('destroy');
}, {offset:"100%"});
這個功能確實好聽,沒有任何額外的變量或需要國家來照顧:
function debounce(func, wait, immediate) {
var timeout;
return function() {
var context = this, args = arguments;
var later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
};
將它封裝在閉包中,將布爾標誌設置爲true,在執行前檢查它,獲利。 – 2014-10-06 21:02:24