js 如何实现暂停和继续功能

binphp
  • 243

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

回复
阅读 16.3k
3 个回答

停一段时间=>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); })

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏