zoukankan      html  css  js  c++  java
  • 中央定时器控制

    浏览器不会对特定interval处理程序的多个实例进行队列

    由于javascript在执行时,页面渲染的所有更新操作都要暂停,所有利用定时器分解长时间运行的任务,用于提升用户体验。

    中央定时器:

    1. 每个页面在同一时间只需要运行一个定时器

    2. 可以根据需要暂停和恢复定时器

    3.删除回调函数的过程变得简单

    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title>timers</title>
    </head>
    <body>
    	<div id="box" style="display: inline-block; position: absolute;">hello</div>
    </body>
    <script>
    	window.onload=function(){
    		var timers = {
    			timerId: 0,
    			timers: [],
    			add: function(fn){
    				this.timers.push(fn);
    			},
    			start: function(){
    				if(this.timerId) return;
    				(function runNext(){
    					for(var i = 0; i < timers.timers.length; i++){
    						if(timers.timers[i]() === false){
    							timers.timers.splice(i,1);
    							i--;
    						}
    					}
    					timers.timerId = setTimeout(runNext, 0);
    				})()
    			},
    			stop: function(){
    				clearTimeout(this.timerId);
    				this.timerId = 0;
    			}
    		}
    
    		var box = document.getElementById('box'), x=0, y=0;
    
    		timers.add(function(){
    			box.style.left = x + 'px';
    			console.log('x')
    			if(++x > 50) return false;
    		});
    		timers.add(function(){
    			box.style.top = y + 'px';
    			console.log('y')
    			y += 2;
    			if(y > 120) return false; 
    		});
    
    		timers.start();
    	}
    </script>
    </html>
    

    在大多数情况下,是使用闭包来给定时器传递数据的,但现代浏览器(IE9以上),也允许我们在声明定时器的时候传入参数

    for(var i =1 ; i< 4; i++){
        setTimeout(function(i){console.log(i)},100,i)
    }
    
    for(var i =1 ; i< 4; i++){
        (function(i){
             setTimeout(function(){console.log(i)},100)        
        })
    }
    
    setTimeout(function runNext(){
        console.log("In");
        setTimeout(runNext, 10);        
    },10)
  • 相关阅读:
    Senventh Week(补充完整)
    Sixth Week(补充完整)
    Fifth Week(补充完整)
    Fourth Week (补充完整)
    九大内置对象
    matlab 简单绘图
    matlab ./
    困惑
    【转】matlab中inf
    matlab x~=0
  • 原文地址:https://www.cnblogs.com/luguiqing/p/8263475.html
Copyright © 2011-2022 走看看