利用js定时器制作了一个红绿灯
欢迎观看《好看的博文没人赞》——系列
本文章为转载《好看的博文没人赞之末安》
先来一波效果图,兴趣是各位看官最好的使然,有兴趣可以继续往下面看:

按绿色按钮启动,红灯亮起,顺序依次为:红-》黄-》绿-》黄-》红
启动效果图:
按红色按钮暂停后,灯光保持不动:
各位看官能看到这里,肯定是由兴趣继续下去的,那咋们就开始代码界面:
第一步:咋们需要一个黑色的全屏背景,一个红绿灯杆,三盏灯(红、黄、绿),两个按钮控制开关
-
<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"; -
}
第四步:逻辑地方来了,从谁开始亮,亮多久,第一亮了,第二个谁来亮,第三个。。。
红->黄->绿->黄->红,在这样一直循环
-
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方法关闭定时器,让它暂停循环。
全部代码在下面:
-
<!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>
4450

被折叠的 条评论
为什么被折叠?



