定義:當咱們須要隔一段時間,再執行一段代碼。或者每隔一段時間,執行一段代碼。咱們能夠使用定時器。
使用場景:例如網站輪播圖的自動滾動。廣告延遲彈出的某些操做css
定時器-setInterval基本定義html
使用舉例1—無參函數函數
<script> //方式一:函數爲匿名函數 setInterval(function () { console.log(1); },1000); //方式二:有名函數-part1 function fn() { console.log(2); } setInterval(fn,1000); //方式二:有名函數-part2 function go() { console.log(3); } setInterval("go()",1000); </script>
使用舉例2—有參函數性能
<script> //方式一:有名函數的傳參 function fn(a,b) { console.log(a,b); } setInterval("fn('c','d')",1000); //方式二:匿名函數的傳參 setInterval(function(a,b,c){ console.log(a,b,c); },1000,"a","b","c"); </script>
注意:網站
<script> //如下代碼只是開了一個定時器,會在1s以後執行這個函數。 setInterval(function(){ console.log(1); },1000); console.log(222); console.log(333); </script>
如下是代碼執行結果:先打印222和333。以後1s後打印1.
編碼
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> #box{ width:400px; height:400px; border:2px solid black; background: red; } </style> </head> <body> <div id="box"></div> <script> data=["red","blue","yellow","pink"]; var box=document.getElementById("box"); var num=0; var L=data.length; setInterval(function () { num++; //L%num的結果永遠會小於L,而且是0,1,2,····L-1這樣循環的。 num%=L; box.style.backgroundColor=data[num]; },1000); </script> </body> </html>
自動播放效果,能夠點擊查看。由於codepen不方便放圖片,就用顏色代替spa
css樣式我就刪除了,直接給出js和html。須要所有代碼的能夠從連接下面去看。點擊連接中的css,html,js均可以查看對應的代碼。code
方式一:控制步長來中止輪播圖的運動,可是定時器還沒關(聽語言描述可能有些模糊,直接上代碼)
經過步長來控制中止輪播圖的運動,點擊查看效果htm
<body> <div id="box"></div> <button id="stop">中止播放</button> <script> data=["red","blue","yellow","pink"]; var box=document.getElementById("box"); var stop=document.getElementById("stop"); var num=0; var step=1; var L=data.length; setInterval(function () { //經過step來控制顏色的轉化。 num+=step; num%=L; box.style.backgroundColor=data[num]; //能夠從 console.log(1)看出定時器沒關閉,就算中止輪播了,依舊不停的打印1. console.log(1); },1000); stop.onclick=function () { //讓step爲0,圖片就中止在那個地方。可是定時器沒關。 step=0; }; </script> </body> </html>
方式二:經過一個變量來控制定時器中函數的執行,可是定時器仍是沒關。
經過onoff變量來控制定時器內函數的執行遞歸
<body> <div id="box"></div> <button id="stop">中止播放</button> <script> data=["red","blue","yellow","pink"]; var box=document.getElementById("box"); var stop=document.getElementById("stop"); var num=0; //默認爲true。 var onoff=true; var L=data.length; setInterval(function () { //button點擊以後,onoff爲false,則沒法執行 if(onoff) { num++; num %= L; box.style.backgroundColor = data[num]; } console.log(1); },1000); stop.onclick=function () { //點擊以後爲false。 onoff=false; }; </script> </body> </html>
方式三:經過關閉定時器來中止輪播圖的運動。
此方法簡潔,不須要添加額外的變量。可是有時候也須要以上兩種方法。
直接關閉定時器,點擊css,html,js能夠查看對應代碼
<body> <div id="box"></div> <button id="stop">中止播放</button> <script> data=["red","blue","yellow","pink"]; var box=document.getElementById("box"); var stop=document.getElementById("stop"); var num=0; var L=data.length; //setInterval()方法返回的是定時器的編號。這個編號是獨有的。 var timer=setInterval(function () { num++; num %= L; box.style.backgroundColor = data[num]; console.log(1); },1000); stop.onclick=function () { //clearInterval(),經過傳入定時器的編號來。關閉定時器 clearInterval(timer); }; </script> </body> </html>
方式一:清除定時器,再開啓定時器。
清除定時器,再開啓定時器。注意:從新開啓定時器的時候也要清除前一個定時器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> #box{ width:400px; height:400px; border:2px solid black; background: red; } button{ width: 100px; line-height: 50px; background: cornflowerblue; color: #fff; font-size: 20px; border:none; margin-top: 10px; outline: none; } </style> </head> <body> <div id="box"></div> <button id="stop">中止播放</button> <button id="star">開始播放</button> <script> data=["red","blue","yellow","pink"]; var box=document.getElementById("box"); var stop=document.getElementById("stop"); var star=document.getElementById("star"); var num=0; var L=data.length; function move() { num++; num %= L; box.style.backgroundColor = data[num]; }; var timer=setInterval(move,1000); stop.onclick=function () { //clearInterval(),經過傳入定時器的編號來。關閉定時器 clearInterval(timer); }; star.onclick=function () { //每次開啓定時器的時候,先清除前一個定時器。由於當用戶重複點擊開始按鈕,就會打開多個定時器。 //因此,每次打開定時器,先清除前一個。 clearInterval(timer); timer=setInterval(move,1000); } </script> </body> </html>
方式二:使用變量控制定時器的開始與中止
使用step步長控制定時器的開始與中止
<div id="box"></div> <button id="stop">中止播放</button> <button id="star">開始播放</button> <script> data=["red","blue","yellow","pink"]; var box=document.getElementById("box"); var stop=document.getElementById("stop"); var star=document.getElementById("star"); var num=0; var L=data.length; var step=1; function move() { num+=step; num %= L; box.style.backgroundColor = data[num]; }; setInterval(move,1000); stop.onclick=function () { //中止按鈕,step=0 step=0; }; star.onclick=function () { //開始按鈕,step=1 step=1; } </script>
方式三:使用變量從新開始定時器
使用變量從新開始定時器
<body> <div id="box"></div> <button id="stop">中止播放</button> <button id="star">開始播放</button> <script> data=["red","blue","yellow","pink"]; var box=document.getElementById("box"); var stop=document.getElementById("stop"); var star=document.getElementById("star"); var num=0; var L=data.length; var isPlay=true; function move() { num++; num %= L; box.style.backgroundColor = data[num]; }; var timer=setInterval(move,1000); stop.onclick=function () { clearInterval(timer); isPlay=false; }; star.onclick=function () { if(!isPlay){//沒有在播放就開始定時器 timer=setInterval(move,1000); } isPlay=true;//改變狀態 } </script> </body>
定時器-setTimeout基本定義
延遲型定時器
隔一段時間執行一段代碼(執行一次)
語法:
setTimeout(函數,時間間隔)
好比setTimeout(fn,20)
隔(等待)20 毫秒執行一段函數
時間間隔的單位 :是毫秒(ms)
1s = 1000ms
1.舉例說明
點擊查看如下代碼效果
<script> //隔一秒頁面會彈出Hello。 var timer = setTimeout( function(){ alert("Hello"); },1000 ); //點擊頁面任何一個位置關閉定時器。 document.onclick = function(){ clearTimeout( timer ); } </script>
2.使用遞歸,讓setTimeout定時器有setInterval的效果
點擊連接查看如下代碼效果!!!
<script> var timer = 0; function fn(){ timer = setTimeout( function(){ console.log(1); //繼續調用fn,則在控制檯還會打印1。 fn(); },1000 ) } fn(); document.onclick = function(){ clearTimeout( timer ) } </script>