动画结束在递归函数中不起作用
animationend not working in recursive function
我有一个函数,我想在下面使用它来循环访问存储在数组中的每个id,该id指向我添加到div的动态HTML元素。然后,我想更改 CSS 类并添加一个 animationend 事件侦听器。这一切都有效,除了我注意到事件在动画完成之前触发。最终发生的事情是数组中的所有元素同时进行动画处理。我希望每个元素都连续动画化。我一直在玩代码并在网上寻找答案,但我被卡住了。有什么想法吗?
Javascript代码:
function moveLines(count){
if(count<=introLinesBlurEls.length){
thisMoveLine = document.getElementById(introLinesBlurEls[count]);
thisMoveLine.className = 'introImgBlurAnimate';
count++;
thisMoveLine.addEventListener('animationend', moveLines(count), false);
}else{
alert('Hey. I am done.');
}
}
您正在执行要分配处理程序的位置。
thisMoveLine.addEventListener('animationend', moveLines(count), false);
这是在执行 moveLines()。您需要推迟 moveLine 的执行,直到事件发生。为此,您需要创建一个闭包,以便可以绑定 count 参数。
thisMoveLine.addEventListener('animationend', moveLines.bind(this, count), false);
您可以使用 .bind() 或将其包装在函数中以保留范围
thisMoveLine.addEventListener('animationend', function(){ moveLines(count); }, false);
首先,
不同浏览器中的动画事件可能有不同的名称:webkitAnimationEnd
、animationend
、MSAnimationEnd
,例如对我来说,只有 chrome 才能正常工作webkitAnimationEnd
。因此,最好为所有这些绑定处理程序(您可以为此创建单个函数)。
此外,为了count
参数正确传递给事件处理程序,您应该使用匿名函数,或者将计数变量移动到全局范围并在没有参数的情况下调用moveLines
。
当你把这个'moveLines(count)'作为addEventListener的第二个参数时,你实际上会立即调用moveLines
函数并将其结果传递给addEventListener,而不是传递函数本身。
查看工作示例
相关文章:
- 监视函数从服务返回不起作用,但作用域函数起作用
- 是什么让这个简单的递归不起作用
- 我怎样才能把它变成一个循环,而不是一个递归函数
- 使用回调的递归Javascript函数不起作用
- JavaScript中的递归调用不起作用
- 事件不起作用时触发函数
- 用于验证空输入字段不起作用的 JS 函数
- 一个关于这个不起作用的JavaScript函数的故事
- 动画结束在递归函数中不起作用
- Javascript 递归循环到自动构建菜单结构不起作用
- javascript settimeout在递归函数中不起作用
- 为什么这个递归算法在JS中不起作用?
- 递归值域函数不起作用
- 不能在递归函数中返回变量
- 将参数附加到URL地址在多个函数中不起作用(第二个函数不变)
- 使用ng-include和ng-repeat的递归在第一级之后就不起作用了
- JavaScript递归节点等价函数不起作用
- Javascript正则表达式在IE 6-9中不起作用:";期望函数";错误
- 将动态值从onclick传递给另一个不起作用的javascript函数
- 使用 JavaScript 递归函数创建 HTML 不起作用