滚动时,向下/向上滚动100vh一次

时间:2017-10-15 15:23:49

标签: javascript jquery

我想要处理滚动,因为当我向下滚动时,我想要以相同但相反的方式向上滚动viewport.height

它正在使用它,但它只能用于向下滚动一次并且一次备份(也有一段时间我无法滚动,如果我经过一段时间后go下来并且等待又一次上升) :

function viewport() {
    var e = window, a = 'inner';
    if (!('innerWidth' in window )) {
        a = 'client';
        e = document.documentElement || document.body;
    }
    return { width : e[ a+'Width' ] , height : e[ a+'Height' ] };
}
var height = viewport().height;
$(document).on('wheel', function(e) {
    var delta = e.originalEvent.deltaY;
    if(delta > 0) $('html, body').animate({scrollTop: height+'px'});
    else $('html, body').animate({scrollTop: '-'+height+'px'});
    return false;
  });
body{min-height: 300vh; overflow: auto;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

1 个答案:

答案 0 :(得分:0)

问题是因为您需要从当前位置递增或递减scrollTop。您当前的代码仅重复将其设置为单个值,因此似乎没有任何更改。

要解决此问题,请在scrollTop+=前加-=值,具体取决于所需的旅行方向。另请注意,您可以在jQuery中使用$(window).height()代替您当前拥有的viewport()函数。

最后,您还需要在其中加入stop(true)来阻止动画在用户反复滚动鼠标滚轮时排队。

$(document).on('wheel', function(e) {
  e.preventDefault();
  $('html, body').stop(true).animate({
    scrollTop: (e.originalEvent.deltaY > 0 ? '+=' : '-=') + $(window).height() + 'px'
  });
});
body {
  min-height: 300vh;
  overflow: auto;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>