javascript - js 如何实现暂停和继续功能
大家讲道理
大家讲道理 2017-04-10 14:52:40
[JavaScript讨论组]

如果使用for循环直接会卡死浏览器,如果使用setTimeout下面的程序会继续运行,所以有什么好的办法能够实现类似asleep的功能

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(3)
PHPz

停一段时间=>setTimeout
等事件发生=>绑定事件

setTimeout的话是要把延迟的代码写在function里面的

当然如果异步/时序逻辑特别复杂可以用一些辅助方法/类库,比如说就是需要单纯的sleep时间的话可以

function Timer() { this.delay = 0; }
Timer.prototype.sleep = function(delay) { this.delay += delay; return this; };
Timer.prototype.do = function(cb) { setTimeout(cb, this.delay); return this; };

console.log(new Date);

var timer = new Timer();
timer
  .sleep(3000)
  .do(function() { console.log(new Date); })
  .sleep(1000)
  .do(function() { console.log(new Date); })

黄舟

使用状态监测。
准备两个可访问的变量值,一个用于保存状态,一个用于暂停时缓存下个步骤。
主执行线程对所有步骤采用回调隔离设计,每个步骤结束后对该变量进行监测,变量值为继续时直接调用下个步骤,变量值为暂停时,将下个步骤写入缓存并停止。
暂停按钮用于将状态变量设为暂停值,继续按钮将将状态变量设为继续值并执行缓存的步骤。

状态检测函数可以直接作为回调处理,也可以使用数组依次的方式,具体可参考各种可串联和暂停的动画库。

高洛峰

如果动画不复杂的话

使用css的animation代替js的那部分动画,由于animation提供了一个animation-play-state属性,js可以控制这个属性的paused和running来控制动画

http://www.w3school.com.cn/cssref/pr_animation-play-state.asp

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号