2013-06-05 40 views
0

我想拖延頁面滾動,所以如果我把一些動畫,它不會毀了。這裏是我的代碼:jQuery Scroll Timeout

var lastScrollY = 0, 
    delayFlag = true, 
    delayTime = 1000; 

$(window).on('scroll', function(e) { 
    if(delayFlag == true) { 
     delayFlag = false; 
     var posY = $(this).scrollTop(), 
      sectionH = $('.page').height(), 
      multiplier = (Math.round(lastScrollY/sectionH)); 

     if(lastScrollY > posY) { 
      $(window).scrollTop((multiplier - 1) * sectionH); 
     } 
     else { 
      $(window).scrollTop((multiplier + 1) * sectionH); 
     } 

     lastScrollY = posY; 

     setTimeout(function() { delayFlag = true }, delayTime); 
    } 
    else { 
     e.preventDefault(); 
    } 
}); 

jQuery preventDefault()不起作用。有什麼辦法可以讓滾動事件延遲一些嗎?

+0

在學術上來講,這是一個有趣題。然而,用戶體驗用語是一個狡猾的領域。不應該重寫用戶期望的交互而沒有真正的理由。如果像滾動這樣的基本功能在他們到達時停止工作,用戶開始將您的應用程序/網頁視爲「buggy」和「難以使用」。 –

回答

1

雖然我不會推薦這個,但從用戶體驗的角度來看(我個人討厭頁面阻止我去網站的某個位置,所以我必須看他們的廣告或什麼哈維,而且我相信我不是唯一一個......),你可能能夠做的事情,而不是捕獲滾動事件,關閉滾動的區域開始。

因此,沿着這些線路(例如的jsfiddle:http://jsfiddle.net/mori57/cmLun/):什麼

在CSS:

.noscroll { 
    overflow:hidden; 
} 

而在你的JS:

var lastScrollY = 0, 
    delayFlag = true, 
    delayTime = 1000; 

$(function(){ 
    $("body").addClass("noscroll"); 

    window.setTimeout(function(){ 
     $("body").removeClass("noscroll"); 
    }, delayTime); 
}); 
2

e.preventDefault();用於防止事件的默認操作。例如,單擊錨點將導致頁面導航到存儲在錨點的href中的地址,並在錨點的單擊事件中調用e.preventDefault();將導致此導航到不會發生

e.preventDefault();不會取消剛剛發生的事件。在表單輸入的onchange事件中調用它將不會將其值恢復到原來的值,並且在滾動事件中調用它將不會取消滾動。