防止滚动直到动画完成
Prevent scrolling until animation complete
我正在使用此代码滚动:
if (window.addEventListener) {
window.addEventListener('DOMMouseScroll', wheel, false);
}
window.onmousewheel = document.onmousewheel = wheel;
function wheel(event) {
var delta = 0;
if (event.wheelDelta) {
(delta = event.wheelDelta / 120);
} else if (event.detail) {
(delta = -event.detail / 3);
}
handle(delta);
if (event.preventDefault) {
(event.preventDefault());
}
event.returnValue = false;
}
function handle(delta) {
var time = 800;
var distance = 300;
$('html, body').stop().animate({
scrollTop: $(window).scrollTop() - (distance * delta)
}, time);
}
一切正常,但有点烦人的是当用户尝试多次滚动时出现的小步骤。
我无法使用某些自定义滚动条来避免该问题,因为我正在使用 paroller 来实现相同的效果。
有什么方法可以防止用户再次滚动直到动画结束?
有两种方法。一个更难,但我认为这就是你正在寻找的。第二个答案已经在评论里了
我正在做的是禁用与滚动相关的键盘事件、鼠标滚动和按钮。
只是删除溢出的缺点是滚动条只是消失了,这有时会让一些用户感到困惑
// code from here
var keys = {37: 1, 38: 1, 39: 1, 40: 1};
function preventDefault(e) {
e = e || window.event;
if (e.preventDefault)
e.preventDefault();
e.returnValue = false;
}
function preventDefaultForScrollKeys(e) {
if (keys[e.keyCode]) {
preventDefault(e);
return false;
}
}
function disableScroll() {
if (window.addEventListener) // older FF
window.addEventListener('DOMMouseScroll', preventDefault, false);
window.onwheel = preventDefault; // modern standard
window.onmousewheel = document.onmousewheel = preventDefault; // older browsers, IE
window.ontouchmove = preventDefault; // mobile
document.onkeydown = preventDefaultForScrollKeys;
}
function enableScroll() {
if (window.removeEventListener)
window.removeEventListener('DOMMouseScroll', preventDefault, false);
window.onmousewheel = document.onmousewheel = null;
window.onwheel = null;
window.ontouchmove = null;
document.onkeydown = null;
}
// your code
function handle(delta) {
var time = 800;
var distance = 300;
$('html, body').stop().animate({
scrollTop: $(window).scrollTop() - (distance * delta)
}, time,
start:function(){
disableScroll();
},
complete:function(){
enableScroll()
});
}
我正在使用此代码滚动:
if (window.addEventListener) {
window.addEventListener('DOMMouseScroll', wheel, false);
}
window.onmousewheel = document.onmousewheel = wheel;
function wheel(event) {
var delta = 0;
if (event.wheelDelta) {
(delta = event.wheelDelta / 120);
} else if (event.detail) {
(delta = -event.detail / 3);
}
handle(delta);
if (event.preventDefault) {
(event.preventDefault());
}
event.returnValue = false;
}
function handle(delta) {
var time = 800;
var distance = 300;
$('html, body').stop().animate({
scrollTop: $(window).scrollTop() - (distance * delta)
}, time);
}
一切正常,但有点烦人的是当用户尝试多次滚动时出现的小步骤。
我无法使用某些自定义滚动条来避免该问题,因为我正在使用 paroller 来实现相同的效果。
有什么方法可以防止用户再次滚动直到动画结束?
有两种方法。一个更难,但我认为这就是你正在寻找的。第二个答案已经在评论里了
我正在做的是禁用与滚动相关的键盘事件、鼠标滚动和按钮。
只是删除溢出的缺点是滚动条只是消失了,这有时会让一些用户感到困惑
// code from here
var keys = {37: 1, 38: 1, 39: 1, 40: 1};
function preventDefault(e) {
e = e || window.event;
if (e.preventDefault)
e.preventDefault();
e.returnValue = false;
}
function preventDefaultForScrollKeys(e) {
if (keys[e.keyCode]) {
preventDefault(e);
return false;
}
}
function disableScroll() {
if (window.addEventListener) // older FF
window.addEventListener('DOMMouseScroll', preventDefault, false);
window.onwheel = preventDefault; // modern standard
window.onmousewheel = document.onmousewheel = preventDefault; // older browsers, IE
window.ontouchmove = preventDefault; // mobile
document.onkeydown = preventDefaultForScrollKeys;
}
function enableScroll() {
if (window.removeEventListener)
window.removeEventListener('DOMMouseScroll', preventDefault, false);
window.onmousewheel = document.onmousewheel = null;
window.onwheel = null;
window.ontouchmove = null;
document.onkeydown = null;
}
// your code
function handle(delta) {
var time = 800;
var distance = 300;
$('html, body').stop().animate({
scrollTop: $(window).scrollTop() - (distance * delta)
}, time,
start:function(){
disableScroll();
},
complete:function(){
enableScroll()
});
}