当前位置:首页 > JavaScript

js实现闪电

2026-03-14 08:22:11JavaScript

使用Canvas绘制闪电效果

通过HTML5的Canvas API可以动态生成闪电效果。以下是一个简单的实现方法:

js实现闪电

const canvas = document.getElementById('lightningCanvas');
const ctx = canvas.getContext('2d');

function drawLightning() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.beginPath();

    const startX = Math.random() * canvas.width;
    const startY = 0;
    ctx.moveTo(startX, startY);

    let currentX = startX;
    let currentY = startY;

    while (currentY < canvas.height) {
        const nextX = currentX + (Math.random() - 0.5) * 30;
        const nextY = currentY + Math.random() * 20 + 10;
        ctx.lineTo(nextX, nextY);
        currentX = nextX;
        currentY = nextY;
    }

    ctx.strokeStyle = 'rgba(255, 255, 255, 0.7)';
    ctx.lineWidth = 2;
    ctx.stroke();

    // 添加闪光效果
    ctx.fillStyle = 'rgba(255, 255, 255, 0.2)';
    ctx.fillRect(0, 0, canvas.width, canvas.height);
}

setInterval(drawLightning, 300);

使用CSS动画创建闪电效果

纯CSS也可以模拟闪电效果,适合简单的视觉展示:

js实现闪电

<style>
.lightning {
    position: absolute;
    width: 2px;
    height: 100%;
    background: white;
    left: 50%;
    box-shadow: 0 0 10px 2px white;
    opacity: 0;
    animation: lightning 4s infinite;
}

@keyframes lightning {
    0% { opacity: 0; }
    1% { opacity: 0.8; }
    2% { opacity: 0; }
    8% { opacity: 0; }
    9% { opacity: 0.5; }
    10% { opacity: 0; }
    100% { opacity: 0; }
}
</style>

<div class="lightning"></div>

使用Three.js创建3D闪电

对于更复杂的3D场景,可以使用Three.js库:

import * as THREE from 'three';

const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer();

function createLightning() {
    const points = [];
    points.push(new THREE.Vector3(0, 10, 0));

    for (let i = 1; i < 10; i++) {
        points.push(new THREE.Vector3(
            points[i-1].x + (Math.random() - 0.5) * 2,
            points[i-1].y - Math.random() * 3,
            0
        ));
    }

    const geometry = new THREE.BufferGeometry().setFromPoints(points);
    const material = new THREE.LineBasicMaterial({ color: 0x00ffff });
    const lightning = new THREE.Line(geometry, material);
    scene.add(lightning);

    setTimeout(() => scene.remove(lightning), 100);
}

setInterval(createLightning, 1000);

优化闪电效果

为了更真实的闪电效果,可以考虑以下优化:

  • 添加分支闪电
  • 实现渐变消失效果
  • 添加环境光变化
  • 使用粒子系统增强视觉效果

每种方法适用于不同场景,Canvas适合2D游戏,CSS适合简单页面效果,Three.js适合3D场景。根据需求选择合适方案。

标签: 闪电js
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…