在多次点击显示系统时间按钮的情况下,再点击停止显示系统时间,这时发现无法停止。
1、多次点击显示系统时间按钮的话,会导致setInterval的ID值不断变化,每点一次ID值加1。
2、这样clearInterval获取到的ID值就只是当前的ID值。
3、之前的对应ID值发生的事件就无法停止。多次点击没有把之前的任务覆盖,而是增加了。
加一个flag标记,使得setInterval只能执行一次,并且必须在clearInterval执行后才能执行第二次。形成相互约束。
可参看知识点:https://www.itwenda.com/course/js/js-ji-shi-qi.html#a3
<html> <head> <title>幸运好抽奖-小游戏</title> <style> .con{width:300px;margin:0 auto;} .show{width:100%;text-align:center;} .title{ color:#40AA53; font-size:30px; font-weight:bold; } .shownum{ border:2px solid #40AA53; height:50px; line-height:50px; color:#40AA53; font-weight:bold; } .btn{ background:#40AA53; color:#ffffff; border-radius: 16px; margin:10px auto; height:30px; line-height:30px; } </style> </head> <body> <div class="con"> <div class="show title">抽奖结果</div> <div class="show shownum" id="shownum">即将开始</div> <div class="show btn" onclick="kaishi();">开始</div> <div class="show btn" onclick="zanting();">暂停</div> </div> <script> //flag标记 var flag = true; // 创建4位随机数 function creatnum(){ return Math.floor(Math.random()*(9999-1000))+1000; } // function kaishisuiji(){ document.getElementById("shownum").innerHTML=creatnum(); } function kaishi(){ //设置权限flag,使start、stop都只能执行一次 if(flag){ bz=setInterval(kaishisuiji,5); flag = false; } } function zanting(){ if(!flag){ clearInterval(bz); flag =true; } } </script> </body> </html>