[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号