如何利用react语法做一个红绿灯效果?下面web建站小编给大家详细介绍一下具体代码。
具体代码如下:
import React, { useEffect, useState } from 'react'
import './index.scss'
function App() {
// 定义当前灯的颜色
const [currentLight, setCurrentLight] = useState('red')
// 定义当前灯在灯列表数据中的index
const [lightOn, setLightOn] = useState(2)
// 所有灯信息map
const lights=[
{
color: 'red',
lightTimer: 5000,
duration: 1000,
twinkleDuration: 5000
},
{
color: 'green',
lightTimer: 4000,
duration: 1000,
twinkleDuration: 5000
},
{
color: 'yellow',
lightTimer: 3000,
duration: 1000,
twinkleDuration: 0
}
]
// 改变当前灯在灯map列表的index
const changeLightFn = () => {
setLightOn((lightOn + 1) % 3)
}
// 灯闪烁的方法
const twinkleFn = ()=>{
// 闪烁的次数
let twinkle_count = 0;
// 用setInterval定时调用设置等的颜色,实现当前灯颜色亮灭交替闪烁
let timer = setInterval(()=>{
// 如果闪烁次数的当前值大于等于当前灯的闪烁时间,就清除计数器,进入下一个灯的列表位置
if (twinkle_count >= lights[lightOn].twinkleDuration/1000) {
changeLightFn()
setCurrentLight('') // 等的颜色清空,显示默认灰色
clearInterval(timer)
return
}
if (twinkle_count % 2 === 0) {
setCurrentLight(lights[lightOn].color) // 灯亮
} else {
setCurrentLight('') // 灯灭
}
twinkle_count++ // 灯的当前闪烁次数累加
}, lights[lightOn].duration)
}
useEffect(()=>{
setCurrentLight(lights[lightOn].color) // 设置当前灯的颜色 -- 灯亮
setTimeout(()=>{
twinkleFn()
}, lights[lightOn].lightTimer) // 当达到前灯亮持续的时间,开始调用灯闪烁的方法
}, [lightOn])
return (
<div>
{
lights.map((item, index) => {
return (
<p key={index}><span className={`light ${item.color === currentLight ? item.color : ''}`}></span></p>
)
})
}
</div>
);
}
export default App
index.scss样式
.light {
display: inline-block;
width: 100px;
height: 100px;
border-radius: 50%;
background: gray;
}
.red {
background-color: red;
}
.green {
background-color: green;
}
.yellow {
background-color: yellow;
}
上面是“如何利用react语法做一个红绿灯效果?(附代码)”的全面内容,想了解更多关于 reactjs 内容,请继续关注web建站教程。
当前网址:https://ipkd.cn/webs_3274.html
workflows工作流
图生图工作流:粉红色梦幻家园comfyui工作流
一颗柔和的水晶金字塔ComfyUI工作流
一个人一条船一条鱼ComfyUI工作流
一群蜜蜂和一个六边形蜂巢ComfyUI工作流
一张科幻照片,火星车在沙漠里ComfyUI工作流
一个男孩在吃西瓜ComfyUI工作流
一个外国人在吹奏萨克斯ComfyUI工作流
一条赤壁龙从蛋中孵化出来ComfyUI工作流
猜你喜欢
声明:本站提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请发送到邮箱:admin@ipkd.cn,我们会在看到邮件的第一时间内为您处理!

canvas空间文本射线
css3结合svg做一个动态广告
利用canvas画几个好玩的星云物种
Bootstrap可视化拖放布局
利用html5+css3实现滚雪球效果(附代码)
利用css3做一个动态loading效果
html5如何3D立方体旋转特效











