首页 > 其他分享 >requestAnimationFrame模拟定时器

requestAnimationFrame模拟定时器

时间:2024-05-13 16:42:50浏览次数:10  
标签:count 定时器 requestAnimationFrame intervalId num let id 模拟

	const {	myInterval, clearMyInterval } = (function(){
					// 存放系统中的定时器id
					        let timerIdMap = { num: 0 }
					        function myInterval(callback, interval) {
					            // 每设置一次定时器,num++ 代表系统中有num个自定义的定时器
					            timerIdMap.num ++
					            // 第 num 个定时器的id
					            let intervalId = 'id' + timerIdMap.num
					            timerIdMap[intervalId] = true;
					            // 循环次数
					            let count = 0
					            let startTime = Date.now();
					            let loop = () => {
					                // 系统map中不存在这个id,就停止循环
					                if (!timerIdMap[intervalId]) {
					                    return
					                }
					                if (Date.now() > startTime + interval * (count + 1)) {
					                    count++;
					                    callback(count)
					                }
					                window.requestAnimationFrame(loop)
					            }
					            loop()
					            return intervalId
					        }
					        // 清空定时器,删除全局的定时器id map
					        function clearMyInterval(intervalId) {
					            delete timerIdMap[intervalId]
					        }
							return {
								myInterval,
								clearMyInterval
							}
				}());
			        
			        // 调用定时器方法,返回定时器id,用于按条件清空
			        let timerId = myInterval((count) => {
			            console.log(count)
						
						fetch('xxxx',{
							method:"post"
						}).then(res => res.json()).then(res => {
							if(res.code ===0 && count ==5){
								clearMyInterval(timerId)
							}
						})
			       }, 2000)
				   
				   // 调用定时器方法,返回定时器id,用于按条件清空
				    let timerId2 = myInterval((count) => {
				        if (count > 15) {
				            clearMyInterval(timerId2)
				        }
				   }, 1000)

标签:count,定时器,requestAnimationFrame,intervalId,num,let,id,模拟
From: https://www.cnblogs.com/chengyunshen/p/18189504

相关文章

  • setTimeout模拟interval
    functionrunTimer(list=[ { delay:2000, text:'第一步延迟2s' }, { delay:3000, text:'第二步延迟3s' }, { delay:1000, text:'第三步延迟1s' }, ],cb=(text)=>{ console.log('渲染回调&......
  • Python调用终端模拟红绿灯
    Python调用终端模拟红绿灯一、需求分析1.需要实现的功能(1)通过控制台输入绿灯、黄灯、红灯的时间(2)输入完成后,按回车,先绿灯倒计时,然后黄灯倒计时,然后红灯倒计时,再到绿灯倒计时,周而复始。2.对类的分析静态特征(1)三个数字:红灯、黄灯、绿灯(2)两个电子屏一个电子屏显示一个数......
  • 【Python】模拟windows文件名排序(自动处理文件名中有数字类型排序)
    实现了一种模拟windows排序的python方法,其排序规则为:不处理浮点数特殊字符(如:&、$、#等)排在数字和字母之前;数字优先于字母排序;数字是连着的整数,应该按照整数进行排序;小写字母排在大写字母前面;英文字符按字母表顺序排序; defcustom_sort_key(str_value):digita......
  • 在PLC的扫描特性下,FOR循环里面套IF或者定时器会发生什么?
    1.为什么会提出这个题目在PLC指令的执行过程中,FOR循环会在每个扫描周期执行完一个循环,然后程序才会接着往下扫描在PLC指令的执行过程中,IF判断会在每次扫描中判断一次条件,满足则进入执行体,不满足则跳出IF把IF放在FOR循环里面,会导致循环体执行时间过长,或者其他问题吗?(答案是不会......
  • Unity2D 模拟手柄实现玩家移动
    1,创建控制器UI2,挂载脚本3,脚本编写基本要素[Tooltip("玩家游戏体")]publicRigidbody2Dplayer;[Tooltip("玩家速度")]publicfloatspeed=1f;[Tooltip("玩家动画")]publicAnimatoranimator;publicenumMode{BU......
  • 梦熊四月 csp-s 模拟赛2 T2 排序
    小B想要对一个长为\(n\)的序列\(A\)排序。已知\(A\)中只包含\(0,1,\cdots,n-1\)且对任意\(i\nej\)有\(A_i\neA_j\)且\(n\)为\(2\)的次幂。为了排序,小B只想用以下两种操作:交换相邻的两个位置,也就是说选择\(1\lei\len-1\)并且交换\(A_i,A_{i+1}\)。......
  • linux模拟windows尝试
    windowswinehttps://github.com/winegui/WineGUIlookingglasshttps://www.youtube.com/watch?v=eTWf5D092VYwinappshttps://nowsci.com/#/winapps/?id=installationmacosdarling跟wine一样,做转义层仅支持shell和一个很老的macOS文件管理器https://docs.darlinghq.org/......
  • NFLS NOI模拟 真夏は誰のモノ
    涉及知识点:DP题面有一个长度为\(n\(\leq6000)\)字符串\(s\),可以执行如下操作:选定一个\(i\in[1,n]\),将\(i\)左侧或者右侧的连续若干个字符变成\(s[i]\)(选定的字符要连续且有一个与\(i\)相邻)。你可以执行任意次这样的操作,请问最后可以得到多少种本质不同的合法的字符串......
  • 准实时数仓搭建指南:以仓储式会员商超为模拟场景
    在电商和新零售持续冲击传统零售商超的今天,仓储式会员店反而成功逃脱曾经的“水土不服”预测,业绩一路向好。与此同时,随着人工智能、大数据、智慧物流等技术的不断革新,零售批发的消费场景也进一步拓展,对数据分析的要求也越发迫切。本文将以巴基斯坦Metro的数仓项目为例,以操作指......
  • LwRB - 一款适用嵌入式系统的轻量级 RingBuffer+MultiTimer - 超精简的纯软件定时器驱
    1、MicroMagic发布世界上最快的64-bitRISC-V核近日,一家位于美国加州森尼维尔的小型电子设计公司MicroMagic宣称设计、生产出了全世界最快的64位RISC-V内核,比苹果的M1芯片和ArmCortex-A9表现还要出色。消息源: http://www.micromagic.com/news/RISCv-Fastest_PR.pdf这......