在vue中如何实现准时的setTimeout
2023-12-14 18:55:55
概要
setTimeout 是不准的。因为 setTimeout 是一个宏任务,它的指定时间指的是:进入主线程的时间。
整体架构流程
当每一次定时器执行时后,都去获取系统的时间来进行修正,虽然每次运行可能会有误差,但是通过系统时间对每次运行的修复,能够让后面每一次时间都得到一个补偿。
技术细节
timer() {
var speed = 1000, // 设定间隔
counter = 1, // 计数
start = new Date().getTime(); // 记录开始时间
// 定义函数 instance
function instance() {
var real = (counter * speed), // 真实值
ideal = (new Date().getTime() - start); // 理想值
counter++; // 计数+1
var diff = (ideal - real); // 差值
// 通过系统时间进行修复
window.setTimeout(function() {
instance();
}, (speed - diff));
console.log(real / 1000); // 输出真实值除以1000
};
// 第一次调用 instance
window.setTimeout(function() {
instance();
}, speed);
},
小结
通过系统的时间补偿,能够让我们的 setTimeout 变得更加准时,至此我们完成了如何让 setTimeout 准时的探索。
文章来源:https://blog.csdn.net/MYuanFang/article/details/134998292
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!