利用js定時器製做了一個紅綠燈
歡迎觀看《好看的博文沒人贊》——系列javascript
先來一波效果圖,興趣是各位看官最好的使然,有興趣能夠繼續往下面看:
按綠色按鈕啓動,紅燈亮起,順序依次爲:紅-》黃-》綠-》黃-》紅css
啓動效果圖:html
按紅色按鈕暫停後,燈光保持不動:java
各位看官能看到這裏,確定是由興趣繼續下去的,那咋們就開始代碼界面:
第一步:咋們須要一個黑色的全屏背景,一個紅綠燈杆,三盞燈(紅、黃、綠),兩個按鈕控制開關
<div class="all"> <div class="nos"> <div id="no1" class="no1"></div> <div id="no3" class="no3"></div> <div id="no2" class="no2"></div> </div> <div class="gan"></div> <input type="button" id="open" class="open" onclick="b1()"/> <input type="button" id="close" class="close" onclick="b2()"/> </div>
第二步:css美化一下
讓它看起來第一眼是個紅綠燈函數
<style> * { margin: 0px; padding: 0px; } .all { width: 100%; height: 80vh; background-color: black; padding-top: 20vh } .nos { width: 350px; border: 5px solid gray; display: flex; margin: auto; border-radius: 15em; padding: 10px; } .no1 { background-color: red; width: 100px; height: 100px; margin: auto; border-radius: 15em; background: radial-gradient(circle 100px,red,black); border: 2px solid red; } .no2 { background-color: green; width: 100px; height: 100px; margin: auto; border-radius: 15em; background: radial-gradient(circle 100px,green,black); border: 2px solid green; } .no3 { background-color: yellow; width: 100px; height: 100px; margin: auto; border-radius: 15em; background: radial-gradient(circle 100px,yellow,black); border: 2px solid yellow; } .gan{ width: 3%; height: 50vh; margin: auto; border: 5px solid gray; border-radius: 0 0 1em 1em; } .open{ width: 5px; height: 2vh; border: 1px solid gray; background-color: green; border-radius: 0 0.5em 0.5em 0; position: absolute; left: 52%; top: 65vh; } .close{ width: 5px; height: 2vh; border: 1px solid gray; background-color: red; border-radius: 0 0.5em 0.5em 0; position: absolute; left: 52%; top: 68vh; } </style>
第三步:作動態效果了 ,燈亮起來的樣子,三個燈固然要準備三個方法了,誰亮咋用誰,他亮的時候,其餘的不許亮
function m1() { document.getElementById("no1").style.transition = "2s"; document.getElementById("no1").style.boxShadow = "0px 0px 200px 100px red"; document.getElementById("no2").style.boxShadow = "0px 0px 0px 0px green"; document.getElementById("no3").style.boxShadow = "0px 0px 0px 0px yellow"; } function m2() { document.getElementById("no2").style.boxShadow = "0px 0px 200px 100px green"; document.getElementById("no1").style.boxShadow = "0px 0px 0px 0px red"; document.getElementById("no3").style.boxShadow = "0px 0px 0px 0px yellow"; document.getElementById("no2").style.transition = "2s"; } function m3() { document.getElementById("no3").style.boxShadow = "0px 0px 200px 100px yellow"; document.getElementById("no2").style.boxShadow = "0px 0px 0px 0px green"; document.getElementById("no1").style.boxShadow = "0px 0px 0px 0px red"; document.getElementById("no3").style.transition = "2s"; }
第四步:邏輯地方來了,從誰開始亮,亮多久,第一亮了,第二個誰來亮,第三個。。。
紅->黃->綠->黃->紅,在這樣一直循環flex
var num = 1; var count = 0; function ms() { switch (num) { case 1: m1(); num++; break; case 2: m3(); if (count==0) { num++; count++; } else{ num--; count--; } break; case 3: m2(); num--; break; } } var count1=0; var start = null; function b1(){ if(count1==0){ count1=1; start=setInterval(ms, 2000); } } function b2(){ if (count1==1) { count1=0; clearInterval(start); } }
上面的b1是定時器啓動,而且是2s/次(2000ms/次)的速度的,b2是定時器關閉,看官想知道什麼是定時器嗎?定時器就是以多少毫秒的速度循環使用指定函數,這樣就能夠實現2s/次的速度循環亮燈了,最後依靠b2方法關閉定時器,讓它暫停循環。spa
所有代碼在下面:code
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <style> * { margin: 0px; padding: 0px; } .all { width: 100%; height: 80vh; background-color: black; padding-top: 20vh } .nos { width: 350px; border: 5px solid gray; display: flex; margin: auto; border-radius: 15em; padding: 10px; } .no1 { background-color: red; width: 100px; height: 100px; margin: auto; border-radius: 15em; background: radial-gradient(circle 100px,red,black); border: 2px solid red; } .no2 { background-color: green; width: 100px; height: 100px; margin: auto; border-radius: 15em; background: radial-gradient(circle 100px,green,black); border: 2px solid green; } .no3 { background-color: yellow; width: 100px; height: 100px; margin: auto; border-radius: 15em; background: radial-gradient(circle 100px,yellow,black); border: 2px solid yellow; } .gan{ width: 3%; height: 50vh; margin: auto; border: 5px solid gray; border-radius: 0 0 1em 1em; } .open{ width: 5px; height: 2vh; border: 1px solid gray; background-color: green; border-radius: 0 0.5em 0.5em 0; position: absolute; left: 52%; top: 65vh; } .close{ width: 5px; height: 2vh; border: 1px solid gray; background-color: red; border-radius: 0 0.5em 0.5em 0; position: absolute; left: 52%; top: 68vh; } </style> <script> function m1() { document.getElementById("no1").style.transition = "2s"; document.getElementById("no1").style.boxShadow = "0px 0px 200px 100px red"; document.getElementById("no2").style.boxShadow = "0px 0px 0px 0px green"; document.getElementById("no3").style.boxShadow = "0px 0px 0px 0px yellow"; } function m2() { document.getElementById("no2").style.boxShadow = "0px 0px 200px 100px green"; document.getElementById("no1").style.boxShadow = "0px 0px 0px 0px red"; document.getElementById("no3").style.boxShadow = "0px 0px 0px 0px yellow"; document.getElementById("no2").style.transition = "2s"; } function m3() { document.getElementById("no3").style.boxShadow = "0px 0px 200px 100px yellow"; document.getElementById("no2").style.boxShadow = "0px 0px 0px 0px green"; document.getElementById("no1").style.boxShadow = "0px 0px 0px 0px red"; document.getElementById("no3").style.transition = "2s"; } var num = 1; var count = 0; function ms() { switch (num) { case 1: m1(); num++; break; case 2: m3(); if (count==0) { num++; count++; } else{ num--; count--; } break; case 3: m2(); num--; break; } } var count1=0; var start = null; function b1(){ if(count1==0){ count1=1; start=setInterval(ms, 2000); } } function b2(){ if (count1==1) { count1=0; clearInterval(start); } } </script> </head> <body> <div class="all"> <div class="nos"> <div id="no1" class="no1"></div> <div id="no3" class="no3"></div> <div id="no2" class="no2"></div> </div> <div class="gan"></div> <input type="button" id="open" class="open" onclick="b1()" /> <input type="button" id="close" class="close" onclick="b2()" /> </div> </body> </html>
結尾:htm
本博客有該源碼的下載。blog
製做不易,請各位看官點個小小的贊,在下感激涕零,你非要三連我也沒辦法(狗頭保命),哈哈。