通过回调还是不能完美解决~
[quote=引用 13 楼 haohaovpal 的回复:] [quote=引用 11 楼 讨厌走开啦 的回复:] [quote=引用 9 楼 haohaovpal 的回复:] [quote=引用 8 楼 讨厌走开啦 的回复:] [quote=引用 7 楼 haohaovpal 的回复:] [quote=引用 6 楼 讨厌走开啦 的回复:] [quote=引用 5 楼 haohaovpal 的回复:] [quote=引用 4 楼 讨厌走开啦 的回复:] [quote=引用 3 楼 haohaovpal 的回复:] [quote=引用 2 楼 讨厌走开啦 的回复:] setInterval没有检查动画是否执行完成吧,下一个setInterval的结果过来的时候有可能setTimeout还没执行完或还没来得及执行,此时2个动画同时执行就是你看到的很乱的结果。因为前台的定时器不是准确的,浏览器不是正好在4000毫秒的时候执行下一次轮询,有可能有别的事务会阻塞一小会(比如用户在3999毫秒的时候点了一下页面的下载按钮,浏览器会等下载对应的js执行完成后再发起轮询),时间长了就会发生前面2个定时器冲突的情况。 有2个解决方案供参考: 1.每次setInterval轮询的时候检查当前dom.style.animation是否已经清空(表示动画完成),没完成则不进行本次动画(代价是少一次动画效果); 2.不用轮询改为websocket,让后台每4000毫秒推送一次结果,由后台来保证轮询时间间隔的可靠性。
[quote=引用 11 楼 讨厌走开啦 的回复:] [quote=引用 9 楼 haohaovpal 的回复:] [quote=引用 8 楼 讨厌走开啦 的回复:] [quote=引用 7 楼 haohaovpal 的回复:] [quote=引用 6 楼 讨厌走开啦 的回复:] [quote=引用 5 楼 haohaovpal 的回复:] [quote=引用 4 楼 讨厌走开啦 的回复:] [quote=引用 3 楼 haohaovpal 的回复:] [quote=引用 2 楼 讨厌走开啦 的回复:] setInterval没有检查动画是否执行完成吧,下一个setInterval的结果过来的时候有可能setTimeout还没执行完或还没来得及执行,此时2个动画同时执行就是你看到的很乱的结果。因为前台的定时器不是准确的,浏览器不是正好在4000毫秒的时候执行下一次轮询,有可能有别的事务会阻塞一小会(比如用户在3999毫秒的时候点了一下页面的下载按钮,浏览器会等下载对应的js执行完成后再发起轮询),时间长了就会发生前面2个定时器冲突的情况。 有2个解决方案供参考: 1.每次setInterval轮询的时候检查当前dom.style.animation是否已经清空(表示动画完成),没完成则不进行本次动画(代价是少一次动画效果); 2.不用轮询改为websocket,让后台每4000毫秒推送一次结果,由后台来保证轮询时间间隔的可靠性。
[quote=引用 9 楼 haohaovpal 的回复:] [quote=引用 8 楼 讨厌走开啦 的回复:] [quote=引用 7 楼 haohaovpal 的回复:] [quote=引用 6 楼 讨厌走开啦 的回复:] [quote=引用 5 楼 haohaovpal 的回复:] [quote=引用 4 楼 讨厌走开啦 的回复:] [quote=引用 3 楼 haohaovpal 的回复:] [quote=引用 2 楼 讨厌走开啦 的回复:] setInterval没有检查动画是否执行完成吧,下一个setInterval的结果过来的时候有可能setTimeout还没执行完或还没来得及执行,此时2个动画同时执行就是你看到的很乱的结果。因为前台的定时器不是准确的,浏览器不是正好在4000毫秒的时候执行下一次轮询,有可能有别的事务会阻塞一小会(比如用户在3999毫秒的时候点了一下页面的下载按钮,浏览器会等下载对应的js执行完成后再发起轮询),时间长了就会发生前面2个定时器冲突的情况。 有2个解决方案供参考: 1.每次setInterval轮询的时候检查当前dom.style.animation是否已经清空(表示动画完成),没完成则不进行本次动画(代价是少一次动画效果); 2.不用轮询改为websocket,让后台每4000毫秒推送一次结果,由后台来保证轮询时间间隔的可靠性。
这种情况除了定时器触发时间不准确之外。最常见的原因是在上一个定时器没有结束之前,又因为事件触发等情况再一次执行了创建新的定时器的代码。 这样就会出现两个或N多个相同的定时器同时计时,必然会造成混乱。 一般的解决方法是在创建新的定时器之前先取消上一个定时器。 clearInterval(timer); timer = setInterval(function(){..........}, 500);
[quote=引用 8 楼 讨厌走开啦 的回复:] [quote=引用 7 楼 haohaovpal 的回复:] [quote=引用 6 楼 讨厌走开啦 的回复:] [quote=引用 5 楼 haohaovpal 的回复:] [quote=引用 4 楼 讨厌走开啦 的回复:] [quote=引用 3 楼 haohaovpal 的回复:] [quote=引用 2 楼 讨厌走开啦 的回复:] setInterval没有检查动画是否执行完成吧,下一个setInterval的结果过来的时候有可能setTimeout还没执行完或还没来得及执行,此时2个动画同时执行就是你看到的很乱的结果。因为前台的定时器不是准确的,浏览器不是正好在4000毫秒的时候执行下一次轮询,有可能有别的事务会阻塞一小会(比如用户在3999毫秒的时候点了一下页面的下载按钮,浏览器会等下载对应的js执行完成后再发起轮询),时间长了就会发生前面2个定时器冲突的情况。 有2个解决方案供参考: 1.每次setInterval轮询的时候检查当前dom.style.animation是否已经清空(表示动画完成),没完成则不进行本次动画(代价是少一次动画效果); 2.不用轮询改为websocket,让后台每4000毫秒推送一次结果,由后台来保证轮询时间间隔的可靠性。
[quote=引用 7 楼 haohaovpal 的回复:] [quote=引用 6 楼 讨厌走开啦 的回复:] [quote=引用 5 楼 haohaovpal 的回复:] [quote=引用 4 楼 讨厌走开啦 的回复:] [quote=引用 3 楼 haohaovpal 的回复:] [quote=引用 2 楼 讨厌走开啦 的回复:] setInterval没有检查动画是否执行完成吧,下一个setInterval的结果过来的时候有可能setTimeout还没执行完或还没来得及执行,此时2个动画同时执行就是你看到的很乱的结果。因为前台的定时器不是准确的,浏览器不是正好在4000毫秒的时候执行下一次轮询,有可能有别的事务会阻塞一小会(比如用户在3999毫秒的时候点了一下页面的下载按钮,浏览器会等下载对应的js执行完成后再发起轮询),时间长了就会发生前面2个定时器冲突的情况。 有2个解决方案供参考: 1.每次setInterval轮询的时候检查当前dom.style.animation是否已经清空(表示动画完成),没完成则不进行本次动画(代价是少一次动画效果); 2.不用轮询改为websocket,让后台每4000毫秒推送一次结果,由后台来保证轮询时间间隔的可靠性。
[quote=引用 6 楼 讨厌走开啦 的回复:] [quote=引用 5 楼 haohaovpal 的回复:] [quote=引用 4 楼 讨厌走开啦 的回复:] [quote=引用 3 楼 haohaovpal 的回复:] [quote=引用 2 楼 讨厌走开啦 的回复:] setInterval没有检查动画是否执行完成吧,下一个setInterval的结果过来的时候有可能setTimeout还没执行完或还没来得及执行,此时2个动画同时执行就是你看到的很乱的结果。因为前台的定时器不是准确的,浏览器不是正好在4000毫秒的时候执行下一次轮询,有可能有别的事务会阻塞一小会(比如用户在3999毫秒的时候点了一下页面的下载按钮,浏览器会等下载对应的js执行完成后再发起轮询),时间长了就会发生前面2个定时器冲突的情况。 有2个解决方案供参考: 1.每次setInterval轮询的时候检查当前dom.style.animation是否已经清空(表示动画完成),没完成则不进行本次动画(代价是少一次动画效果); 2.不用轮询改为websocket,让后台每4000毫秒推送一次结果,由后台来保证轮询时间间隔的可靠性。
[quote=引用 5 楼 haohaovpal 的回复:] [quote=引用 4 楼 讨厌走开啦 的回复:] [quote=引用 3 楼 haohaovpal 的回复:] [quote=引用 2 楼 讨厌走开啦 的回复:] setInterval没有检查动画是否执行完成吧,下一个setInterval的结果过来的时候有可能setTimeout还没执行完或还没来得及执行,此时2个动画同时执行就是你看到的很乱的结果。因为前台的定时器不是准确的,浏览器不是正好在4000毫秒的时候执行下一次轮询,有可能有别的事务会阻塞一小会(比如用户在3999毫秒的时候点了一下页面的下载按钮,浏览器会等下载对应的js执行完成后再发起轮询),时间长了就会发生前面2个定时器冲突的情况。 有2个解决方案供参考: 1.每次setInterval轮询的时候检查当前dom.style.animation是否已经清空(表示动画完成),没完成则不进行本次动画(代价是少一次动画效果); 2.不用轮询改为websocket,让后台每4000毫秒推送一次结果,由后台来保证轮询时间间隔的可靠性。
[quote=引用 4 楼 讨厌走开啦 的回复:] [quote=引用 3 楼 haohaovpal 的回复:] [quote=引用 2 楼 讨厌走开啦 的回复:] setInterval没有检查动画是否执行完成吧,下一个setInterval的结果过来的时候有可能setTimeout还没执行完或还没来得及执行,此时2个动画同时执行就是你看到的很乱的结果。因为前台的定时器不是准确的,浏览器不是正好在4000毫秒的时候执行下一次轮询,有可能有别的事务会阻塞一小会(比如用户在3999毫秒的时候点了一下页面的下载按钮,浏览器会等下载对应的js执行完成后再发起轮询),时间长了就会发生前面2个定时器冲突的情况。 有2个解决方案供参考: 1.每次setInterval轮询的时候检查当前dom.style.animation是否已经清空(表示动画完成),没完成则不进行本次动画(代价是少一次动画效果); 2.不用轮询改为websocket,让后台每4000毫秒推送一次结果,由后台来保证轮询时间间隔的可靠性。
[quote=引用 3 楼 haohaovpal 的回复:] [quote=引用 2 楼 讨厌走开啦 的回复:] setInterval没有检查动画是否执行完成吧,下一个setInterval的结果过来的时候有可能setTimeout还没执行完或还没来得及执行,此时2个动画同时执行就是你看到的很乱的结果。因为前台的定时器不是准确的,浏览器不是正好在4000毫秒的时候执行下一次轮询,有可能有别的事务会阻塞一小会(比如用户在3999毫秒的时候点了一下页面的下载按钮,浏览器会等下载对应的js执行完成后再发起轮询),时间长了就会发生前面2个定时器冲突的情况。 有2个解决方案供参考: 1.每次setInterval轮询的时候检查当前dom.style.animation是否已经清空(表示动画完成),没完成则不进行本次动画(代价是少一次动画效果); 2.不用轮询改为websocket,让后台每4000毫秒推送一次结果,由后台来保证轮询时间间隔的可靠性。
87,904
社区成员
224,614
社区内容
加载中
试试用AI创作助手写篇文章吧