在同一个元素上绑定多个计时器而无法关
来源:互联网 发布:达内java培训多少钱 编辑:程序博客网 时间:2024/05/09 18:04
最近在工作时写了这么一个制作波纹效果的函数
当我点击一个元素, 就会开启一个计时器, 然后在计时器中实现一些动画效果, 需要注意的是我是把计时器作为一个自定义属性obj.timer绑定在元素上面的. 然而, 当我非常快速的点击2次之后, 会发现计时器关不掉的. 我一直很纳闷, 明明我只开启了一个计时器, 它都是绑定在obj上面的, 不管我怎么开启, 只要调用清除计时器函数clearInterval时把obj.timer作为参数传递进去就可以啦.
后面查了很多资料, 发现问题出在这里: 当我以非常快的速度连续点击两次时, 第一次会开启一个计时器传递给obj.timer并展示动画效果.然后当这个计时器还没有达到关闭的条件时, 又开启了第二个计时器. 此时obj.timer将会指向第二个计时器, 那么第一个还没关闭的计时器就被遗弃在内存中了, 所以当后面满足关闭条件时, 调用clearInterval 是关闭了第二个计时器, 而第一个计时器其实是没有被清除的, 它被放在内存当中一直调用, 而此时又失去了对它的引用( 因为此时obj.timer指向的是第二个计时器 ), 所以此时第一个计时器就永远没办法关闭了. 那么它就会一直占用内存, 直到你的浏览器奔溃为止. 那么解决方法是什么呢? 就是每次当我调用这个函数的时候, 就立即把计时器关闭, 这样就不会造成第二个计时器传给obj.timer之后第一个计时器就被"遗忘"在内存中而继续执行了
因为代码执行速度非常快, 所以你看到的效果就是会立刻执行下一次的动画效果, 而不会产生什么停顿现象的, 所以这个解决方案被证实是可行的.
- 在同一个元素上绑定多个计时器而无法关
- 在同一个网络接口上绑定多个IP
- Vue同一个dom元素如何绑定多个点击事件?
- C# 允许多个套接字绑定在同一个端口上 端口重用
- JavaScriptDOM练习之为同一个元素绑定多个不同的事件并指向同一个事件处理函数
- 不能对同一个元素调用几次ON,绑定多个事件。。。否则就悲剧了
- 在同一个availability group上创建多个侦听器
- 在同一个电脑上同时启动多个tomcat
- windos在同一个服务器上安装多个mysql实例
- 多个button绑定同一个onclickListener方法
- jquery多个选择器绑定同一个事件
- jquery多个标签绑定同一个事件
- 在同一个页面使用多个不同的jQuery版本,让它们并存而不冲突
- 在同一个页面使用多个不同的jQuery版本,让它们并存而不冲突
- 在同一个页面使用多个不同的jQuery版本,让它们并存而不冲突
- 在同一个页面使用多个不同的jQuery版本,让它们并存而不冲突
- 在同一个页面使用多个不同的jQuery版本而不冲突的方法
- 在同一个页面使用多个不同的jQuery版本,让它们并存而不冲突
- css基础入门
- Unity资源热更之AssetBundle(1)———基本介绍
- 职业发展思考
- MySQL备份和还原(三)
- callgrind查看程序流程
- 在同一个元素上绑定多个计时器而无法关
- MD5加密算法与SHA加密算法
- PL/SQL Developer 和 instantclient客户端快速安装配置(图文)
- 第2章 基本脚本编译------------(创建脚本与使用变量)
- NNU_20161124_3
- 观察者设计模式--listView的源码分析
- 这是一切的开始
- 运行maven install 出现错误: 找不到符号
- Unity资源热更之AssetBundle(2)———旧版本AssetBundle