2013-06-05 42 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事件中调用它将不会将其值恢复到原来的值,并且在滚动事件中调用它将不会取消滚动。