Heim > Fragen und Antworten > Hauptteil
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>each</title>
<script type="text/javascript" src="http://libs.baidu.com/jquery/1.9.1/jquery.js"></script>
</head>
<body>
<ul>
<li class="on">0</li>
<li class="on">0</li>
<li class="on">0</li>
<li class="on">0</li>
<li class="on">0</li>
<li class="on">0</li>
<li class="on">0</li>
<li class="on">0</li>
</ul>
<script type="text/javascript">
var num = 0,
timer = null;
$(".on").each(function (index, value) {
timer = setInterval(function(){
if (num == 900) {
clearInterval(timer);
}else{
num++;
}
$(value).text(num);
},50)
})
</script>
</body>
</html>
Die erste Frage ist, ob das endgültige Erscheinungsbild, das durch if(num==1000) und if(num==900) erhalten wird, unterschiedlich ist? Wenn num==900, außer dem letzten, der sich um ein paar 900 unterscheidet, sind die anderen alle 900. Und wenn es 1000 ist, können dann alle li 1000 werden?
Die zweite Frage ist, dass die Funktion im Timer so geschrieben ist. Warum wird nur das letzte Li gestoppt und das andere Li kann nicht gestoppt werden?
timer = setInterval(function(){
if (num == 998) {
clearInterval(timer);
}
num++;
$(value).text(num);
},50)
我想大声告诉你2017-05-18 11:00:13
timer作为全局变量,他的引用指向了最后一个绑定的定时器,当clearInterval时只有最后绑定的那个定时器被停止了,数字不再变化仅仅是因为num不再增加了,你可以在定时器里console.log(num),就会发现只有最后的定时器停下来了
至于为什么1000的是这样,900不是,是因为1000/8能整除,取决于li元素的个数,巧合而已,没有特别原因