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

标签 javascript jquery scroll single-page-application

这就是我想要实现的http://www.rogerdubuis.com/这是我当前的代码:

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 应该增加 1。但它向下和向上滚动并发生困惑。有什么想法可以防止这种情况发生吗?

最佳答案

我编写了一个插件来管理单页滚动,就像您提供的链接一样。 jQuery Mousewheel Intention

这是我认为你想做的事情的一个 fiddle 。 jsfiddle

(function ($) {
    $(function () {
        var scrolling = false;
        var sections = $('.section');
        var container = $('#container');
        var pos = 0;

        function wheelDirection(evt) {
            if (!evt) {
                evt = event;
            }
            return (evt.detail < 0) ? 1 : (evt.wheelDelta > 0) ? 1 : -1;
        }

        function animate(dir) {
            if (scrolling) {
                return;
            }
            var next = $();
            if (dir === 'down') {
                next = sections.eq(pos).next();
            } else {
                next = sections.eq(pos).prev();
            }
            if (!next.length) {
                return;
            }
            scrolling = true;
            container.animate({
                scrollTop: '+=' + next.offset().top
            }, 'slow', function () {
                pos = sections.index(next);
                sections.removeClass('active');
                next.addClass('active');
                scrolling = false;
            });
        }

        function scroll(event) {
            var direction = wheelDirection(event.originalEvent);
            direction = (direction >= 0) ? 'up' : 'down';
            animate(direction);
        }

        function scrollHandler(event) {
            if (event.certainty > 0.6) {
                scroll(event);
            }
        }

        $(window).on('mousewheelintention', scrollHandler);
    });
}(jQuery));

关于javascript - 使用鼠标滚轮向下/向上滚动一点,滚动到其他 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22735425/

相关文章:

javascript - react Node 依赖安装破坏了我的 react native 应用程序

jquery - : "$("#somediv"). css ('top' , pos > 0 是什么意思?位置:0);“意思是

jquery - 检测到 "body"内向下滚动

javascript - 删除所有满足条件的元素

javascript - 我的按钮和链接悬停停止工作

jQuery - 如果水平滚动的 div 位于滚动的最左边和最右边,则触发事件

javascript - 在宽度增加的元素中滚动时内容跳跃/不自然的移动

javascript - 如何更改网站中的默认键盘快捷键

Javascript 在选择标签 ID 中添加 If 语句

javascript - 如何在本地项目中使用jsdoc