[js] setTimeout
#
var n = 0; function a() { // if (n > 5) { // //如果不用 clearTimeout()则需要把 return false 判定放最前面 // return false; // } console.log(n); var c = setTimeout(arguments.callee, 100); //var c = setTimeout(a, 100); n++; if (n > 5) { clearTimeout(c); } console.log('a' + n); } setTimeout(a, 100);
  
# 
    
setTimeout(function() { // if (n > 5) { // //如果不用 clearTimeout()则需要把 return false 判定放最前面 // return false; // } console.log(n); var c = setTimeout(arguments.callee, 100); n++; if (n > 5) { clearTimeout(c); } console.log('a' + n); }, 100);
#
var n = 0; function a() { console.log(n); var c = setTimeout(a, 100); n++; if (n > 5) { clearTimeout(c); } console.log('a' + n); } a();
#一般移动动画的实现
<!doctype html>
<html>
    <head>
        <title></title>
    </head>
    <body>
        <div id="myDiv" style="position:absolute;width:100px;height:100px;left:0px;top:10px;background:red;"></div>
        <script type="text/javascript">
            setTimeout(function() {
                var div = document.getElementById("myDiv"),
                    left = parseInt(div.style.left)+1;
                    //console.log(left);
                div.style.left = left + "px";
                if (left < 200) {
                    setTimeout(arguments.callee, 10);
                }
            }, 10);
        </script>
    </body>
</html>
#数组分块 array chunking (yielding processes)
<!doctype html>
<html>
<head>
    <title></title>
</head>
<body>
    <div id="myDiv" style="background:red;"></div>
    <script type="text/javascript">
        
        var data = [12,123,1234,453,436,23,23,5,4123,45,346,5634,2234,345,342];
        
        function chunk(array, process, context){
            setTimeout(function(){
                var item = array.shift();
                console.log(data);
                process.call(context, item);
                
                if (array.length > 0){
                    setTimeout(arguments.callee, 100);         
                }
            }, 100);        
        }
    
        function printValue(item){
            var div = document.getElementById("myDiv");
            div.innerHTML += item + "<br>";        
        }
//      chunk(data, printValue);
        chunk(data.concat(), printValue);
    </script>
</body>
</html>
#函数节流,防止连续重复操作
<!doctype html>
<html>
<head>
    <title></title>
</head>
<body>
    <div id="myDiv" style="background:red;"></div>
    <script type="text/javascript">
        function throttle(method, scope) {
            clearTimeout(method.tId);
            method.tId= setTimeout(function(){
                method.call(scope);
            }, 100);
        }
    
        function resizeDiv(){
            var div = document.getElementById("myDiv");
            div.style.height = div.offsetWidth + "px";
        }
        
        window.onresize = function(){
            throttle(resizeDiv);//只需要获得最后一刻的操作结果
        };
    </script>
</body>
</html>
#
var processor = { timeoutId: null, performProcessing: function() { var div = document.getElementById("myDiv"); div.style.height = div.offsetWidth + "px"; }, //初始化 process: function() { clearTimeout(this.timeoutId); var that = this; this.timeoutId = setTimeout(function() { that.performProcessing(); }, 100) } } window.onresize = function() { processor.process(); };
                    
                
                
            
        
浙公网安备 33010602011771号