当前位置: 首页 > article >正文

JS实现灯光闪烁效果

在 JS中,我们可以实现灯光闪烁效果,这里主要用 setInterval 和 clearInterval 两个重要方法。

效果图

在这里插入图片描述

源代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>灯闪烁效果</title>
    <style>
        #light {
            width: 100px;
            height: 100px;
            background-color: gray;
            margin: 20px;
			border-radius:50%;
        }
		.dd{
			width: 150px;
			height: 200px;
			margin:30px auto;
		}
    </style>
</head>
<body>
	<div class="dd">
		<div id="light"></div>
		<button onclick="startFlashing()">开启闪烁</button>
		<button onclick="stopFlashing()">关闭闪烁</button>
	</div>


<script>
    let flashingInterval;

    function startFlashing() {
        if (!flashingInterval) { // 防止重复启动
            flashingInterval = setInterval(toggleLight, 500); // 每500毫秒切换一次
        }
    }

    function stopFlashing() {
        clearInterval(flashingInterval);
        flashingInterval = null;
        document.getElementById('light').style.backgroundColor = 'gray'; // 停止时设置为灰色
    }

    function toggleLight() {
        const lightElement = document.getElementById('light');
        if (lightElement.style.backgroundColor === 'gray') {
            lightElement.style.backgroundColor = 'yellow'; // 切换到亮的状态
        } else {
            lightElement.style.backgroundColor = 'gray'; // 切换到暗的状态
        }
    }
</script>
</body>
</html>

setInterval,clearInterval 解释

》 setInterval

setInterval 方法允许你设定一个定时器,该定时器会按照指定的时间间隔(以毫秒为单位)重复调用一个函数或执行一段代码。它非常适合用于需要周期性更新的任务,如动画、轮询服务器数据等。

语法:

var intervalID = setInterval(func, delay, param1, param2, ...);
// 或者
var intervalID = setInterval(code, delay);
  • func 是要重复执行的函数。
  • code 是一个字符串形式的可执行代码(不推荐使用,因为它有安全风险)。
  • delay 是两次调用之间的时间间隔,以毫秒为单位(注意,实际延迟可能因系统或其他因素而有所不同)。
  • param1, param2, ... 是传递给 func 函数的参数列表(某些旧版浏览器不支持此特性)。
  • intervalID 是返回的一个唯一的 ID 标识符,可以用来取消定时器。

示例:

function sayHello() {
    console.log('Hello');
}
var intervalId = setInterval(sayHello, 3000); // 每3秒打印一次 'Hello'

》 clearInterval

一旦设置了定时器,如果你希望提前停止它,可以使用 clearInterval 方法。这个方法接收一个由 setInterval 返回的定时器 ID,并停止对应的定时任务。

语法:

clearInterval(intervalID);
  • intervalID 是通过 setInterval 方法获得的定时器 ID。

示例:

var intervalId = setInterval(sayHello, 3000);

// 假设在某个条件下停止定时器
setTimeout(function() {
    clearInterval(intervalId); // 停止定时器
}, 10000); // 在10秒后停止定时器

》 注意事项

  • setInterval 的回调函数是在全局作用域中执行的,这意味着它的 this 关键字将指向全局对象(通常是 window 对象)。如果需要保持当前作用域,可以使用箭头函数或 bind() 方法。
  • 如果 delay 设置得太短,可能会导致性能问题,尤其是在低性能设备上运行时。此外,浏览器通常会有最小延迟限制(通常为4毫秒左右),即使你设置的值小于这个限制,也会被调整到最小延迟。
  • 当页面卸载时,所有的定时器都会自动清除,所以不需要手动去清理这些定时器。

http://www.kler.cn/a/538044.html

相关文章:

  • 0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型
  • CSS 伪类(Pseudo-classes)的详细介绍
  • 使用Pytorch训练一个图像分类器
  • Git(分布式版本控制系统)系统学习笔记【并利用腾讯云的CODING和Windows上的Git工具来实操】
  • android的Compose 简介
  • 【Matlab优化算法-第14期】基于智能优化算法的VMD信号去噪项目实践
  • 基于对比增强的超声视频的域知识为乳腺癌诊断提供了深度学习
  • kafka服务端之日志存储
  • 计算机考研复试准备之Python编程技巧-自用
  • Kotlin 的作用域函数:apply、let、also、run,以及 with、takeIf 和 takeUnless。函数的用法和使用场景
  • Java即时编译器(JIT)的原理及在美团的实践经验
  • 1456. 定长子串中元音的最大数目
  • openGauss 3.0 数据库在线实训课程6:学习用户一次只能连接到一个数据库,没法访问其他数据库的对象
  • Redis06 - Redis集群为什么是Hash槽而不是一致性哈希
  • ubuntu 本地部署deepseek r1 蒸馏模型
  • 用 Lambda 表达式处理 Java Stream 流操作
  • 装备库室管控系统|支持国产化、自主研发
  • 【医院运营统计专题】2.运营统计:医院管理的“智慧大脑”
  • 【Milvus】向量数据库pymilvus使用教程
  • 2022java面试总结,1000道(集合+JVM+并发编程+Spring+Mybatis)的Java高频面试题
  • Vue | 透传 Attributes(非 prop 的 attribute )
  • STM32 硬件I2C读写MPU6050
  • V8 GC垃圾回收
  • 一步一步生成音乐类小程序的详细指南,结合AI辅助开发的思路
  • android studio无痛入门
  • 西安科技创新领跑者:树莓集团以科技创新赋能产业生态圈