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

标签 javascript jquery animation sprite

我正在尝试使用 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/

相关文章:

javascript - 在 React 中从 getElementById 转换为 useRef

javascript - 在小数点范围内搜索

javascript - 如何为凸包算法的中间步骤设置动画?

jQuery UI 的 addClass 动画不会对子元素进行动画更改

javascript - 将变量从脚本传递到模式中

当单词以丹麦字符 æ、ø、å 开头时,Javascript 正则表达式失败

javascript - 目标容器不是 ReactJS 中的 DOM 元素

javascript - jQuery datepicker 悬停输出日期

javascript - 是否可以检测哪一行或函数触发了元素上的 jquery 更改事件?

ios - swift 中的按钮旋转动画制作类似的动画