如何利用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工作流
 一头巨大的古代大象背后建着一座城市 一头巨大的古代大象背后建着一座城市
 一个穿绿衣服国风古典女孩 一个穿绿衣服国风古典女孩
 stvmccrr风格的玫瑰花ComfyUI工作流 stvmccrr风格的玫瑰花ComfyUI工作流
 一只黑色的小猫在童话森林里嗅着一朵发光的外星花 一只黑色的小猫在童话森林里嗅着一朵发光的外星花
 庭院,彩色玫瑰,云雾笼罩comfyui工作流 庭院,彩色玫瑰,云雾笼罩comfyui工作流
 一个男人正走进科幻的大门ComfyUI工作流 一个男人正走进科幻的大门ComfyUI工作流
猜你喜欢
声明:本站提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请发送到邮箱:admin@ipkd.cn,我们会在看到邮件的第一时间内为您处理!

 canvas经线动画走到效果
 canvas经线动画走到效果 自动打字效果(惊喜在后面)
 自动打字效果(惊喜在后面) 利用js做一个炫酷音乐背景效果
 利用js做一个炫酷音乐背景效果 利用CSS3代码编写45款按钮效果
 利用CSS3代码编写45款按钮效果 canvas黑洞漩涡(canvas+js)
 canvas黑洞漩涡(canvas+js) js导出excel插件(兼容mac电脑Numbers表格)
 js导出excel插件(兼容mac电脑Numbers表格) css3结合svg做一个动态广告
 css3结合svg做一个动态广告 3d文字360度旋转
 3d文字360度旋转









