现在我有一个小的代码,其中使用了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; });
的事件
据我了解,它应该完全阻止用户中断事件,但不能完全正常工作。它会打断他们,但不会每次都打扰,而且似乎有很多故障。
希望您能理解我要解释的内容。
答案 0 :(得分:0)
感谢大家尝试帮助我:-)。我决定暂时禁用该功能,这是我计划的。