如何让用户不打扰window.scrollTo()

时间:2019-07-09 14:38:08

标签: javascript

现在我有一个小的代码,其中使用了window.scrollTo(),并且我想防止用户中断Scrolling功能,直到完成为止。

  let isMoving = false;

    const scroll_keys = { 37: 1, 38: 1, 39: 1, 40: 1 };

    preventDefault = (e) => {
        console.log(isMoving);
        if (!isMoving) return;
        e = e || window.event;
        if (e.preventDefault)
            e.preventDefault();
        e.returnValue = false;
    }

    preventDefaultForScrollKeys = (e) => {
        if (!isMoving) return;
        if (keys[e.keyCode]) {
            preventDefault(e);
            return false;
        }
    }

    document.addEventListener('wheel', preventDefault, { passive: false });
    document.addEventListener('DOMMouseScroll', preventDefault, { passive: false });
    document.addEventListener('scroll', preventDefault, { passive: false });
    window.ontouchmove = preventDefault;
    document.onkeydown = preventDefaultForScrollKeys;

function scrollTo(offset, callback) {
        const onScroll = () => {
            const scrollTop = window.scrollTop || window.pageYOffset

            if (scrollTop === offset) {
                window.removeEventListener('scroll', onScroll)
                callback()
            }
        }
        window.addEventListener('scroll', onScroll);

        onScroll();
        window.scrollTo({
            top: offset,
            behavior: 'smooth'
        });
    }

我将window.scrollTo称为isMoving = true; scrollTo(0, () => { isMoving = false; });的事件

据我了解,它应该完全阻止用户中断事件,但不能完全正常工作。它会打断他们,但不会每次都打扰,而且似乎有很多故障。

希望您能理解我要解释的内容。

1 个答案:

答案 0 :(得分:0)

感谢大家尝试帮助我:-)。我决定暂时禁用该功能,这是我计划的。