js定时器实现红绿灯效果

利用js定时器制作了一个红绿灯

欢迎观看《好看的博文没人赞》——系列

本文章为转载《好看的博文没人赞之末安》

先来一波效果图,兴趣是各位看官最好的使然,有兴趣可以继续往下面看:

 按绿色按钮启动,红灯亮起,顺序依次为:红-》黄-》绿-》黄-》红

启动效果图:

按红色按钮暂停后,灯光保持不动:

各位看官能看到这里,肯定是由兴趣继续下去的,那咋们就开始代码界面:

第一步:咋们需要一个黑色的全屏背景,一个红绿灯杆,三盏灯(红、黄、绿),两个按钮控制开关

 
  1. <div class="all">

  2. <div class="nos">

  3. <div id="no1" class="no1"></div>

  4. <div id="no3" class="no3"></div>

  5. <div id="no2" class="no2"></div>

  6. </div>

  7. <div class="gan"></div>

  8. <input type="button" id="open" class="open" onclick="b1()"/>

  9. <input type="button" id="close" class="close" onclick="b2()"/>

  10. </div>

第二步:css美化一下

让它看起来第一眼是个红绿灯

 
  1. <style>

  2. * {

  3. margin: 0px;

  4. padding: 0px;

  5. }

  6.  
  7. .all {

  8. width: 100%;

  9. height: 80vh;

  10. background-color: black;

  11. padding-top: 20vh

  12. }

  13.  
  14. .nos {

  15. width: 350px;

  16. border: 5px solid gray;

  17. display: flex;

  18. margin: auto;

  19. border-radius: 15em;

  20. padding: 10px;

  21. }

  22.  
  23. .no1 {

  24. background-color: red;

  25. width: 100px;

  26. height: 100px;

  27. margin: auto;

  28. border-radius: 15em;

  29. background: radial-gradient(circle 100px,red,black);

  30. border: 2px solid red;

  31. }

  32.  
  33. .no2 {

  34. background-color: green;

  35. width: 100px;

  36. height: 100px;

  37. margin: auto;

  38. border-radius: 15em;

  39. background: radial-gradient(circle 100px,green,black);

  40. border: 2px solid green;

  41. }

  42.  
  43. .no3 {

  44. background-color: yellow;

  45. width: 100px;

  46. height: 100px;

  47. margin: auto;

  48. border-radius: 15em;

  49. background: radial-gradient(circle 100px,yellow,black);

  50. border: 2px solid yellow;

  51. }

  52. .gan{

  53. width: 3%;

  54. height: 50vh;

  55. margin: auto;

  56. border: 5px solid gray;

  57. border-radius: 0 0 1em 1em;

  58. }

  59. .open{

  60. width: 5px;

  61. height: 2vh;

  62. border: 1px solid gray;

  63. background-color: green;

  64. border-radius: 0 0.5em 0.5em 0;

  65. position: absolute;

  66. left: 52%;

  67. top: 65vh;

  68. }

  69. .close{

  70. width: 5px;

  71. height: 2vh;

  72. border: 1px solid gray;

  73. background-color: red;

  74. border-radius: 0 0.5em 0.5em 0;

  75. position: absolute;

  76. left: 52%;

  77. top: 68vh;

  78. }

  79. </style>

第三步:做动态效果了 ,灯亮起来的样子,三个灯当然要准备三个方法了,谁亮咋用谁,他亮的时候,其他的不准亮

 
  1. function m1() {

  2. document.getElementById("no1").style.transition = "2s";

  3. document.getElementById("no1").style.boxShadow = "0px 0px 200px 100px red";

  4. document.getElementById("no2").style.boxShadow = "0px 0px 0px 0px green";

  5. document.getElementById("no3").style.boxShadow = "0px 0px 0px 0px yellow";

  6. }

  7.  
  8. function m2() {

  9. document.getElementById("no2").style.boxShadow = "0px 0px 200px 100px green";

  10. document.getElementById("no1").style.boxShadow = "0px 0px 0px 0px red";

  11. document.getElementById("no3").style.boxShadow = "0px 0px 0px 0px yellow";

  12. document.getElementById("no2").style.transition = "2s";

  13. }

  14.  
  15. function m3() {

  16. document.getElementById("no3").style.boxShadow = "0px 0px 200px 100px yellow";

  17. document.getElementById("no2").style.boxShadow = "0px 0px 0px 0px green";

  18. document.getElementById("no1").style.boxShadow = "0px 0px 0px 0px red";

  19. document.getElementById("no3").style.transition = "2s";

  20. }

 第四步:逻辑地方来了,从谁开始亮,亮多久,第一亮了,第二个谁来亮,第三个。。。

红->黄->绿->黄->红,在这样一直循环

 
  1. var num = 1;

  2. var count = 0;

  3.  
  4. function ms() {

  5. switch (num) {

  6. case 1:

  7. m1();

  8. num++;

  9. break;

  10. case 2:

  11. m3();

  12. if (count==0) {

  13. num++;

  14. count++;

  15. } else{

  16. num--;

  17. count--;

  18. }

  19. break;

  20. case 3:

  21. m2();

  22. num--;

  23. break;

  24. }

  25. }

  26. var count1=0;

  27. var start = null;

  28. function b1(){

  29. if(count1==0){

  30. count1=1;

  31. start=setInterval(ms, 2000);

  32. }

  33. }

  34. function b2(){

  35. if (count1==1) {

  36. count1=0;

  37. clearInterval(start);

  38. }

  39. }

 

上面的b1是定时器启动,并且是2s/次(2000ms/次)的速度的,b2是定时器关闭,看官想知道什么是定时器吗?定时器就是以多少毫秒的速度循环使用指定函数,这样就可以实现2s/次的速度循环亮灯了,最后依靠b2方法关闭定时器,让它暂停循环。

全部代码在下面:

 
  1. <!DOCTYPE html>

  2. <html>

  3. <head>

  4. <meta charset="utf-8" />

  5. <title></title>

  6. <style>

  7. * {

  8. margin: 0px;

  9. padding: 0px;

  10. }

  11.  
  12. .all {

  13. width: 100%;

  14. height: 80vh;

  15. background-color: black;

  16. padding-top: 20vh

  17. }

  18.  
  19. .nos {

  20. width: 350px;

  21. border: 5px solid gray;

  22. display: flex;

  23. margin: auto;

  24. border-radius: 15em;

  25. padding: 10px;

  26. }

  27.  
  28. .no1 {

  29. background-color: red;

  30. width: 100px;

  31. height: 100px;

  32. margin: auto;

  33. border-radius: 15em;

  34. background: radial-gradient(circle 100px,red,black);

  35. border: 2px solid red;

  36. }

  37.  
  38. .no2 {

  39. background-color: green;

  40. width: 100px;

  41. height: 100px;

  42. margin: auto;

  43. border-radius: 15em;

  44. background: radial-gradient(circle 100px,green,black);

  45. border: 2px solid green;

  46. }

  47.  
  48. .no3 {

  49. background-color: yellow;

  50. width: 100px;

  51. height: 100px;

  52. margin: auto;

  53. border-radius: 15em;

  54. background: radial-gradient(circle 100px,yellow,black);

  55. border: 2px solid yellow;

  56. }

  57. .gan{

  58. width: 3%;

  59. height: 50vh;

  60. margin: auto;

  61. border: 5px solid gray;

  62. border-radius: 0 0 1em 1em;

  63. }

  64. .open{

  65. width: 5px;

  66. height: 2vh;

  67. border: 1px solid gray;

  68. background-color: green;

  69. border-radius: 0 0.5em 0.5em 0;

  70. position: absolute;

  71. left: 52%;

  72. top: 65vh;

  73. }

  74. .close{

  75. width: 5px;

  76. height: 2vh;

  77. border: 1px solid gray;

  78. background-color: red;

  79. border-radius: 0 0.5em 0.5em 0;

  80. position: absolute;

  81. left: 52%;

  82. top: 68vh;

  83. }

  84. </style>

  85. <script>

  86. function m1() {

  87. document.getElementById("no1").style.transition = "2s";

  88. document.getElementById("no1").style.boxShadow = "0px 0px 200px 100px red";

  89. document.getElementById("no2").style.boxShadow = "0px 0px 0px 0px green";

  90. document.getElementById("no3").style.boxShadow = "0px 0px 0px 0px yellow";

  91. }

  92.  
  93. function m2() {

  94. document.getElementById("no2").style.boxShadow = "0px 0px 200px 100px green";

  95. document.getElementById("no1").style.boxShadow = "0px 0px 0px 0px red";

  96. document.getElementById("no3").style.boxShadow = "0px 0px 0px 0px yellow";

  97. document.getElementById("no2").style.transition = "2s";

  98. }

  99.  
  100. function m3() {

  101. document.getElementById("no3").style.boxShadow = "0px 0px 200px 100px yellow";

  102. document.getElementById("no2").style.boxShadow = "0px 0px 0px 0px green";

  103. document.getElementById("no1").style.boxShadow = "0px 0px 0px 0px red";

  104. document.getElementById("no3").style.transition = "2s";

  105. }

  106.  
  107. var num = 1;

  108. var count = 0;

  109.  
  110. function ms() {

  111. switch (num) {

  112. case 1:

  113. m1();

  114. num++;

  115. break;

  116. case 2:

  117. m3();

  118. if (count==0) {

  119. num++;

  120. count++;

  121. } else{

  122. num--;

  123. count--;

  124. }

  125. break;

  126. case 3:

  127. m2();

  128. num--;

  129. break;

  130. }

  131. }

  132. var count1=0;

  133. var start = null;

  134. function b1(){

  135. if(count1==0){

  136. count1=1;

  137. start=setInterval(ms, 2000);

  138. }

  139. }

  140. function b2(){

  141. if (count1==1) {

  142. count1=0;

  143. clearInterval(start);

  144. }

  145. }

  146.  
  147. </script>

  148. </head>

  149. <body>

  150. <div class="all">

  151. <div class="nos">

  152. <div id="no1" class="no1"></div>

  153. <div id="no3" class="no3"></div>

  154. <div id="no2" class="no2"></div>

  155. </div>

  156. <div class="gan"></div>

  157. <input type="button" id="open" class="open" onclick="b1()" />

  158. <input type="button" id="close" class="close" onclick="b2()" />

  159. </div>

  160. </body>

  161. </html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值