gpt4 book ai didi

javascript - 滚动时禁用滚动

转载 作者:行者123 更新时间:2023-11-30 16:51:17 27 4
gpt4 key购买 nike

我正在编写一个代码,它为 100% body.height 的滚动设置动画。一切正常,但我试图在动画持续时禁用滚动以防止进一步的不良行为。我正在使用这段代码

function animate(x) {
var start = new Date();
var id = setInterval(function (e) {

var timepassed = new Date() - start;
var progress = timepassed / x.duration;
if (progress > 1) {
progress = 1;
}
var delta = x.delta(progress);
x.step(delta);
if (progress == 1) {
clearInterval(id);

}

}, x.delay);


}

function fak(e) {
e.preventDefault();
return false;
}

function move(e) {
e.preventDefault();
var wheel = e.wheelDelta;
wheel = (wheel == 120) ? "-1" : "1";
var body_height = document.body.offsetHeight;
var scrollIt = body_height * wheel;
var page = window.pageYOffset;
animate({
delay: 10,
duration: 700,
delta: function (p) {
return p;
},
step: function (delta) {
window.scrollTo(0, page + (delta * scrollIt));
}
});
return false;
}
document.body.addEventListener("mousewheel", move, false);
document.body.addEventListener("DOMMouseScroll", move, false);

我尝试在间隔中在 mousewheel 和 mousescroll 上分配 fak 函数,然后在最后使用

恢复对它们的原始分配
function animate(x) {
var start = new Date();
var id = setInterval(function (e) {
document.body.addEventListener("mousewheel", fak, false);
document.body.addEventListener("DOMMouseScroll", fak, false);
var timepassed = new Date() - start;
var progress = timepassed / x.duration;
if (progress > 1) {
progress = 1;
}
var delta = x.delta(progress);
x.step(delta);
if (progress == 1) {
clearInterval(id);
document.body.addEventListener("mousewheel", move, false);
document.body.addEventListener("DOMMouseScroll", move, false);

}

}, x.delay);


}

但是也没用。现场演示:http://jsfiddle.net/Trolstover/o2pvo2t8/我是不是忽略了什么?

最佳答案

我对你的代码做了一些修改。

http://jsfiddle.net/o2pvo2t8/2/

只需在滚动时设置一个标志“运行”(在 animate() 开始时),并在结束时清除它。并且只有在没有出现滚动时才执行 mov。

希望对您有所帮助。

var running;

function animate(x) {
running = 1;
var start = new Date();
var id = setInterval(function (e) {

var timepassed = new Date() - start;
var progress = timepassed / x.duration;
if (progress > 1) {
progress = 1;
}
var delta = x.delta(progress);
x.step(delta);
if (progress == 1) {
clearInterval(id);
running = 0;
}

}, x.delay);


}

function fak(e) {
e.preventDefault();
return false;
}

function move(e) {
e.preventDefault();
if (running==1) return;
var wheel = e.wheelDelta;
console.log(wheel);
wheel = (wheel == 120) ? "-1" : "1";
var body_height = document.body.offsetHeight;
var scrollIt = body_height * wheel;
var page = window.pageYOffset;
animate({
delay: 10,
duration: 700,
delta: function (p) {
return p;
},
step: function (delta) {
window.scrollTo(0, page + (delta * scrollIt));
}
});
return false;
}
document.body.addEventListener("mousewheel", move, false);
document.body.addEventListener("DOMMouseScroll", move, false);

关于javascript - 滚动时禁用滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30487452/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com