鱼C论坛

 找回密码
 立即注册
查看: 80|回复: 7

做一个红绿灯

[复制链接]
发表于 2024-4-16 10:28:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
用html5+JS  做一个模拟道路红绿灯的  显示页面
按左右排列  三个圆圈   分别代表  左转  直行  右转    其中 右转 常绿色  旁边一个方框 显示倒计时的秒数  
要有黄灯闪烁的界面
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-16 10:28:38 | 显示全部楼层
好的,我们可以使用HTML和CSS创建一个红绿灯的模拟界面,并使用JavaScript来实现倒计时和闪烁效果。

首先,我们需要在HTML文件中创建一个包含三个圆形灯的容器,并为每个灯设置一个唯一的id。然后,使用CSS来设置灯的样式,并通过更改class来控制灯的颜色和闪烁。

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <title>红绿灯</title>
  7.     <style>
  8.         .circle {
  9.             width: 100px;
  10.             height: 100px;
  11.             border-radius: 50%;
  12.             margin: 10px;
  13.         }
  14.         .red {
  15.             background-color: red;
  16.         }
  17.         .yellow {
  18.             background-color: yellow;
  19.         }
  20.         .green {
  21.             background-color: green;
  22.         }
  23.     </style>
  24. </head>
  25. <body>
  26.     <div class="circle red" id="leftCircle"></div>
  27.     <div class="circle yellow" id="middleCircle"></div>
  28.     <div class="circle green" id="rightCircle"></div>
  29.     <div id="countdownBox"></div>

  30.     <script src="script.js"></script>
  31. </body>
  32. </html>
复制代码


接下来,在JavaScript文件中,我们会按照以下步骤实现红绿灯的逻辑:

1. 定义一个变量`countdownSeconds`来记录倒计时的秒数,并初始化为10;
2. 定义一个函数`countdown()`来执行倒计时,并在倒计时结束后切换灯的状态;
3. 使用`setInterval()`函数来每隔一秒调用`countdown()`函数,实现倒计时效果;
4. 使用`classList`属性来切换灯的颜色和闪烁效果。

  1. window.onload = function() {
  2.     var countdownSeconds = 10;
  3.     var countdownBox = document.getElementById("countdownBox");
  4.     var leftCircle = document.getElementById("leftCircle");
  5.     var middleCircle = document.getElementById("middleCircle");
  6.     var rightCircle = document.getElementById("rightCircle");

  7.     function countdown() {
  8.         if (countdownSeconds > 0) {
  9.             countdownSeconds--;
  10.             countdownBox.innerHTML = countdownSeconds + " 秒";
  11.         } else {
  12.             clearInterval(countdownInterval);
  13.             switchLights();
  14.         }
  15.     }

  16.     function switchLights() {
  17.         if (leftCircle.classList.contains("green")) {
  18.             // 切换到右转状态
  19.             leftCircle.classList.remove("green");
  20.             middleCircle.classList.add("yellow");
  21.             middleCircle.classList.add("blink");
  22.             countdownBox.innerHTML = "右转常绿";
  23.         } else {
  24.             // 切换到左转状态
  25.             middleCircle.classList.remove("yellow");
  26.             middleCircle.classList.remove("blink");
  27.             rightCircle.classList.add("green");
  28.             countdownBox.innerHTML = "0 秒";
  29.         }
  30.     }

  31.     var countdownInterval = setInterval(countdown, 1000);
  32. }
复制代码


最后,我们还需要使用CSS来设置闪烁的效果。我们为黄色信号灯(即中间的灯)添加一个`blink`类,并使用关键帧动画来实现闪烁效果。

  1. .blink {
  2.     animation: blink 0.5s infinite alternate;
  3. }

  4. @keyframes blink {
  5.     from {
  6.         opacity: 1;
  7.     }
  8.     to {
  9.         opacity: 0;
  10.     }
  11. }
复制代码


这样,当页面加载完成后,红绿灯会开始倒计时,10秒后左转灯变为黄色并闪烁,再过10秒右转灯变为绿色。同时,在页面上方会显示倒计时的具体秒数。

希望这个例子对你有帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-16 10:42:42 | 显示全部楼层
FishC 发表于 2024-4-16 10:28
好的,我们可以使用HTML和CSS创建一个红绿灯的模拟界面,并使用JavaScript来实现倒计时和闪烁效果。

首 ...

目前 不对,你这一个倒计时结束  就什么都没有了
正常不应该是这样吗
右转绿灯常亮,直行绿  左转红   直行黄闪  左转红   直行红  左转绿  左转红  直行绿   这样一直下去  无休止的
除非没电了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-16 10:43:01 | 显示全部楼层
wp231957 发表于 2024-04-16 10:42
目前 不对,你这一个倒计时结束  就什么都没有了
正 ...


抱歉,我之前的回答有一些问题。以下是一种更接近实际红绿灯工作方式的代码实现:

HTML部分:
  1. <div class="traffic-light">
  2.   <div id="left-light" class="light red"></div>
  3.   <div id="straight-light" class="light green"></div>
  4.   <div id="right-light" class="light red"></div>
  5. </div>
复制代码


CSS部分:
  1. .traffic-light {
  2.   display: flex;
  3.   justify-content: center;
  4.   align-items: center;
  5.   height: 300px;
  6. }

  7. .light {
  8.   width: 100px;
  9.   height: 100px;
  10.   border-radius: 50%;
  11.   margin: 10px;
  12. }

  13. .red {
  14.   background-color: red;
  15. }

  16. .green {
  17.   background-color: green;
  18. }

  19. .blink {
  20.   animation: blink 0.5s infinite alternate;
  21. }

  22. @keyframes blink {
  23.   from {
  24.     opacity: 1;
  25.   }
  26.   to {
  27.     opacity: 0;
  28.   }
  29. }
复制代码


JavaScript部分:
  1. window.onload = function() {
  2.   var leftLight = document.getElementById("left-light");
  3.   var straightLight = document.getElementById("straight-light");
  4.   var rightLight = document.getElementById("right-light");

  5.   function switchLights() {
  6.     // 左转红,直行绿
  7.     leftLight.classList.remove("green");
  8.     leftLight.classList.add("red");
  9.     straightLight.classList.remove("red");
  10.     straightLight.classList.add("green");

  11.     // 直行黄闪
  12.     setTimeout(function() {
  13.       straightLight.classList.add("blink");
  14.     }, 5000);
  15.    
  16.     // 左转绿
  17.     setTimeout(function() {
  18.       straightLight.classList.remove("green");
  19.       straightLight.classList.remove("blink");
  20.       leftLight.classList.remove("red");
  21.       leftLight.classList.add("green");
  22.     }, 7000);

  23.     // 直行红,左转红
  24.     setTimeout(function() {
  25.       leftLight.classList.remove("green");
  26.       leftLight.classList.add("red");
  27.       straightLight.classList.add("red");
  28.     }, 10000);

  29.     // 直行绿
  30.     setTimeout(function() {
  31.       straightLight.classList.remove("red");
  32.       straightLight.classList.add("green");
  33.     }, 12000);

  34.     // 直行红,左转绿
  35.     setTimeout(function() {
  36.       straightLight.classList.remove("green");
  37.       leftLight.classList.remove("red");
  38.       leftLight.classList.add("green");
  39.     }, 15000);

  40.     // 循环执行
  41.     setTimeout(switchLights, 17000);
  42.   }

  43.   switchLights();
  44. };
复制代码


这段JavaScript代码模拟了一个无休止的红绿灯循环。每个阶段的灯光切换时间间隔可以根据实际需要调整。希望这次的答案能满足你的需求!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-16 10:48:30 | 显示全部楼层
FishC 发表于 2024-4-16 10:43
抱歉,我之前的回答有一些问题。以下是一种更接近实际红绿灯工作方式的代码实现:

HTML部分:

可是,没有倒计时的数字显示啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-16 10:48:53 | 显示全部楼层
wp231957 发表于 2024-04-16 10:48
可是,没有倒计时的数字显示啊


非常抱歉,我遗漏了倒计时的数字显示。以下是修正后的代码,其中增加了倒计时的功能:HTML部分:
  1. <div class="traffic-light">
  2.   <div id="left-light" class="light red"></div>
  3.   <div id="straight-light" class="light green"></div>
  4.   <div id="right-light" class="light green"></div>
  5. </div>
  6. <div id="countdownBox">倒计时:<span id="countdownSeconds">10</span> 秒</div>
复制代码

CSS部分:
  1. .traffic-light {
  2.   display: flex;
  3.   justify-content: center;
  4.   align-items: center;
  5.   height: 300px;
  6. }

  7. .light {
  8.   width: 100px;
  9.   height: 100px;
  10.   border-radius: 50%;
  11.   margin: 10px;
  12. }

  13. .red {
  14.   background-color: red;
  15. }

  16. .green {
  17.   background-color: green;
  18. }

  19. .blink {
  20.   animation: blink 0.5s infinite alternate;
  21. }

  22. @keyframes blink {
  23.   from {
  24.     opacity: 1;
  25.   }
  26.   to {
  27.     opacity: 0;
  28.   }
  29. }
复制代码

JavaScript部分:
  1. window.onload = function() {
  2.   var leftLight = document.getElementById("left-light");
  3.   var straightLight = document.getElementById("straight-light");
  4.   var rightLight = document.getElementById("right-light");
  5.   var countdownSecondsBox = document.getElementById("countdownSeconds");
  6.   var countdownSeconds = 10;

  7.   function countdown() {
  8.     if (countdownSeconds > 0) {
  9.       countdownSeconds--;
  10.       countdownSecondsBox.innerHTML = countdownSeconds;
  11.     }
  12.   }

  13.   function switchLights() {
  14.     // 左转红,直行绿
  15.     leftLight.classList.remove("green");
  16.     leftLight.classList.add("red");
  17.     straightLight.classList.remove("red");
  18.     straightLight.classList.add("green");
  19.     countdownSeconds = 10;
  20.     countdownSecondsBox.innerHTML = countdownSeconds;

  21.     // 直行黄闪
  22.     setTimeout(function() {
  23.       straightLight.classList.add("blink");
  24.     }, 5000);

  25.     // 左转绿
  26.     setTimeout(function() {
  27.       straightLight.classList.remove("green");
  28.       straightLight.classList.remove("blink");
  29.       leftLight.classList.remove("red");
  30.       leftLight.classList.add("green");
  31.     }, 7000);

  32.     // 直行红,左转红
  33.     setTimeout(function() {
  34.       leftLight.classList.remove("green");
  35.       leftLight.classList.add("red");
  36.       straightLight.classList.add("red");
  37.     }, 10000);

  38.     // 直行绿
  39.     setTimeout(function() {
  40.       straightLight.classList.remove("red");
  41.       straightLight.classList.add("green");
  42.     }, 12000);

  43.     // 直行红,左转绿
  44.     setTimeout(function() {
  45.       straightLight.classList.remove("green");
  46.       leftLight.classList.remove("red");
  47.       leftLight.classList.add("green");
  48.     }, 15000);

  49.     // 循环执行
  50.     setTimeout(switchLights, 17000);
  51.   }

  52.   switchLights();
  53.   setInterval(countdown, 1000);
  54. };
复制代码

现在倒计时的数字应该会出现在页面上方的倒计时框内,并且在倒计时结束后重新开始计时。希望这次的答案符合你的要求!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-16 10:53:27 | 显示全部楼层
FishC 发表于 2024-4-16 10:48
非常抱歉,我遗漏了倒计时的数字显示。以下是修正后的代码,其中增加了倒计时的功能:HTML部分:

C ...

css中,这段代码什么意思,,能解释一下吗

.blink {
  animation: blink 0.5s infinite alternate;
}

@keyframes blink {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-16 10:53:45 | 显示全部楼层
wp231957 发表于 2024-04-16 10:53
css中,这段代码什么意思,,能解释一下吗

.blink  ...


这段CSS代码定义了一个名为 "blink" 的关键帧动画。关键帧动画是一种在不同时间点上定义元素的不同样式的方式,从而实现动画效果。

具体来说:
1. `animation: blink 0.5s infinite alternate;` 表示将应用名为 "blink" 的关键帧动画到具有 "blink" 类的元素上。
   - `0.5s` 表示动画的持续时间为0.5秒。
   - `infinite` 表示动画无限循环。
   - `alternate` 表示动画在每次循环时交替反向播放。

2. `@keyframes blink` 声明了一个名为 "blink" 的关键帧动画。
   - `from` 表示动画的起始状态,此处是设置透明度为1(完全不透明)。
   - `to` 表示动画的结束状态,此处是设置透明度为0(完全透明)。

所以,这段代码的作用就是使具有 "blink" 类的元素在0.5秒内逐渐从完全不透明变为完全透明,然后再反向播放,不断循环以实现闪烁的效果。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 03:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表