Javascript 使用鼠标滚轮向下/向上滚动一点,滚动到其他div

Javascript 使用鼠标滚轮向下/向上滚动一点,滚动到其他div,javascript,jquery,scroll,single-page-application,Javascript,Jquery,Scroll,Single Page Application,这是我想要实现的目标,这是我当前的代码: var offsetArray = Array(); offsetArray[0] = $('header'); offsetArray[1] = $('#puslapis2'); offsetArray[2] = $('#puslapis5'); offsetArray[3] = $('#puslapis7'); offsetArray[4] = $('#puslapis9'); var pos = 0; var lastScrollTop = 0;

这是我想要实现的目标,这是我当前的代码:

var offsetArray = Array();
offsetArray[0] = $('header');
offsetArray[1] = $('#puslapis2');
offsetArray[2] = $('#puslapis5');
offsetArray[3] = $('#puslapis7');
offsetArray[4] = $('#puslapis9');
var pos = 0;
var lastScrollTop = 0;

$(window).scroll(function () {
    console.log("pos " + pos);
    var st = $(this).scrollTop();
    if (st > lastScrollTop) {
        console.log("Scroll down");
        $('html,body').animate({scrollTop: offsetArray[pos + 1].ofset().top}, 'slow', function () {pos++;});
    } else {
        console.log("Scroll up");
        $('html,body').animate({scrollTop: offsetArray[pos - 1].ofset().top}, 'slow', function () {pos--;});
    }
    lastScrollTop = st;
});

向下滚动一点后,animate应该只调用一次,pos应该增加一次。但它会上下滚动,然后发生混乱。有什么办法可以防止这种情况吗?

我写了一个插件来管理单页滚动,就像你提供的链接一样

这是我认为你想做的事


几年过去了,但对于所有寻求解决方案的人来说:

像这样在jQuery中使用数组是行不通的!请在控制台中查看

所以我决定把它个人化,所以你必须为每一行编辑它

wain = 0;
var pos = 0;
var lastpos = 0;
jobdone = false;

$(window).scroll(function() {
    pos = $(this).scrollTop();

    if (pos > lastpos) {
        //Oben?
        if (wain == 0) {
           $('html, body').animate({
                    scrollTop: $('#port').offset().top
                }, 'fast');

           wain++;
           lastpos = pos;
       };
   } else if (pos ==lastpos) {
   } else {
       //Portfolio?
       if (wain == 1) {
           $('html, body').animate({
                    scrollTop: $('#main').offset().top
                  }, 'fast');
           wain--;
       };                
   };

   lastpos = pos;

})

您只需在注释下c&p if语句并替换whereminumber wain。使用您拥有的ID更改端口/主端口
wain = 0;
var pos = 0;
var lastpos = 0;
jobdone = false;

$(window).scroll(function() {
    pos = $(this).scrollTop();

    if (pos > lastpos) {
        //Oben?
        if (wain == 0) {
           $('html, body').animate({
                    scrollTop: $('#port').offset().top
                }, 'fast');

           wain++;
           lastpos = pos;
       };
   } else if (pos ==lastpos) {
   } else {
       //Portfolio?
       if (wain == 1) {
           $('html, body').animate({
                    scrollTop: $('#main').offset().top
                  }, 'fast');
           wain--;
       };                
   };

   lastpos = pos;