gpt4 book ai didi

javascript - jquery - 如何执行递归函数来重置/维护滚动事件的时间延迟

转载 作者:行者123 更新时间:2023-11-28 01:53:47 25 4
gpt4 key购买 nike

我正在尝试使用 http://spritely.net/ 中的库制作动画。我通过使用 .onscroll() 触发它 - 但我努力阻止滚动事件频繁触发,并且它使动画速度加快太多,因为 .onscroll() 每秒调用它多次启动

通过根据当前时间设置变量,我可以在第一次滚动时停止频繁触发滚动事件

我无法保持后续滚动事件的延迟,每次滚动后变量的效果越来越差

如何保持滚动只触发动画在每个滚动事件启动一次,以便无论我通过启动和停止滚动多少次启动和停止动画,它都保持恒定的速度?这是演示 http://jsfiddle.net/fGmbe/109/

这是代码

var t, l = (new Date()).getTime(), scrolling = false;

$(window).scroll(function(){
var now = (new Date()).getTime();

if(now - l > 800 && !scrolling ){
$('#bird').sprite({fps:6, no_of_frames: 16, rewind: true });
l = now;

}

clearTimeout(t);
t = setTimeout(function(){
if (!scrolling)
$('#bird').spStop()
}, 300);
});


var a, b = (new Date()).getTime(), scrolling = false;
$(window).scroll(function() {
var nw = (new Date()).getTime();
if(nw - b > 800 && !scrolling ){
$('#bird').spStart({fps:8, no_of_frames: 16, rewind: true })
l = nw;
}
});

var c, d = (new Date()).getTime(), scrolling = false;
$(window).scroll(function() {
var nx = (new Date()).getTime();
if(nx - d > 800 && !scrolling ){
$('#bird').spStart({fps:8, no_of_frames: 16, rewind: true })
l = nx;
}
});

最佳答案

要为某个事件仅触发一次处理程序,请去抖动它!

http://benalman.com/projects/jquery-throttle-debounce-plugin/

如果事件在设定的时间内再次触发,则处理程序将被延迟。

编辑:

如何实现您想要的功能的快速示例。请注意我传递给 $.debounce 的第二个参数,它是一个 bool 值,定义事件处理程序是否应在事件开始时或结束时运行。

http://jsfiddle.net/nubwG/

$(function(){
$(window).scroll($.debounce(500, true, startSomething));
$(window).scroll($.debounce(500, false, stopSomething));

function startSomething(){
// start animating here
}

function stopSomething(){
// stop animating here
}
});

关于javascript - jquery - 如何执行递归函数来重置/维护滚动事件的时间延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19408260/

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