当前位置:首页 > JavaScript

js实现灯泡

2026-02-02 10:26:01JavaScript

使用HTML和JavaScript实现灯泡效果

通过HTML创建灯泡的基本结构,使用CSS设置灯泡样式,JavaScript控制灯泡的开关状态。

<!DOCTYPE html>
<html>
<head>
    <style>
        .bulb {
            width: 100px;
            height: 100px;
            border-radius: 50%;
            background-color: gray;
            margin: 20px;
        }
        .bulb.on {
            background-color: yellow;
            box-shadow: 0 0 20px yellow;
        }
    </style>
</head>
<body>
    <div class="bulb" id="bulb"></div>
    <button onclick="toggleBulb()">开关</button>

    <script>
        function toggleBulb() {
            const bulb = document.getElementById('bulb');
            bulb.classList.toggle('on');
        }
    </script>
</body>
</html>

使用Canvas绘制动态灯泡

通过Canvas绘制更复杂的灯泡效果,包括发光动画。

<canvas id="bulbCanvas" width="200" height="200"></canvas>
<button onclick="toggleCanvasBulb()">开关</button>

<script>
    const canvas = document.getElementById('bulbCanvas');
    const ctx = canvas.getContext('2d');
    let isOn = false;

    function drawBulb(state) {
        ctx.clearRect(0, 0, canvas.width, canvas.height);

        // 绘制灯泡
        ctx.beginPath();
        ctx.arc(100, 100, 50, 0, Math.PI * 2);
        ctx.fillStyle = state ? 'yellow' : 'gray';
        ctx.fill();

        // 发光效果
        if (state) {
            const gradient = ctx.createRadialGradient(100, 100, 0, 100, 100, 70);
            gradient.addColorStop(0, 'rgba(255, 255, 0, 0.8)');
            gradient.addColorStop(1, 'rgba(255, 255, 0, 0)');
            ctx.fillStyle = gradient;
            ctx.fillRect(0, 0, canvas.width, canvas.height);
        }
    }

    function toggleCanvasBulb() {
        isOn = !isOn;
        drawBulb(isOn);
    }

    // 初始绘制
    drawBulb(false);
</script>

使用CSS动画实现闪烁效果

为灯泡添加CSS动画实现闪烁效果,模拟真实灯泡。

<style>
    .bulb-animated {
        width: 100px;
        height: 100px;
        border-radius: 50%;
        background-color: gray;
        margin: 20px;
        transition: all 0.3s ease;
    }
    .bulb-animated.on {
        background-color: yellow;
        box-shadow: 0 0 20px yellow;
        animation: flicker 0.5s infinite alternate;
    }
    @keyframes flicker {
        0% { opacity: 1; }
        50% { opacity: 0.8; }
        100% { opacity: 1; }
    }
</style>

<div class="bulb-animated" id="animatedBulb"></div>
<button onclick="toggleAnimatedBulb()">开关</button>

<script>
    function toggleAnimatedBulb() {
        const bulb = document.getElementById('animatedBulb');
        bulb.classList.toggle('on');
    }
</script>

响应物理交互的灯泡

通过监听鼠标移动实现灯泡随光标亮度变化的效果。

js实现灯泡

<div class="bulb-physics" id="physicsBulb"></div>

<style>
    .bulb-physics {
        width: 150px;
        height: 150px;
        border-radius: 50%;
        background-color: gray;
        margin: 20px;
        transition: all 0.1s ease;
    }
</style>

<script>
    const physicsBulb = document.getElementById('physicsBulb');
    document.addEventListener('mousemove', (e) => {
        const x = e.clientX;
        const y = e.clientY;
        const rect = physicsBulb.getBoundingClientRect();
        const centerX = rect.left + rect.width/2;
        const centerY = rect.top + rect.height/2;

        const distance = Math.sqrt(
            Math.pow(x - centerX, 2) + 
            Math.pow(y - centerY, 2)
        );

        const maxDistance = 300;
        let brightness = 1 - Math.min(distance/maxDistance, 1);

        physicsBulb.style.backgroundColor = `rgb(255, 255, ${Math.floor(255 * (1 - brightness))})`;
        physicsBulb.style.boxShadow = `0 0 ${brightness * 30}px yellow`;
    });
</script>

标签: 灯泡js
分享给朋友:

相关文章

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的JWT令牌…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: functio…

js实现 功能

js实现 功能

在 JavaScript 中实现功能通常涉及多个关键步骤,具体取决于功能需求。以下是常见功能的实现方法和示例: 基本功能实现 使用函数封装逻辑是最直接的方式。例如,实现一个计算两数之和的函数: f…

js实现上传文件

js实现上传文件

文件上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现文件上传功能。 <input type="file"…

js实现删除

js实现删除

使用 splice 方法删除数组元素 splice 方法可以删除数组中的元素,并返回被删除的元素。它接受两个参数:起始索引和要删除的元素数量。 const array = [1, 2, 3, 4…