当前位置:首页 > JavaScript

js实现流光

2026-03-02 06:50:34JavaScript

流光效果实现方法

流光效果通常指元素表面出现流动的光线或高光效果,可以通过CSS动画和JavaScript结合实现。以下是几种常见实现方式:

CSS动画配合JavaScript控制

通过CSS定义动画关键帧,JavaScript控制动画触发时机:

/* 定义流光动画 */
@keyframes lightFlow {
  0% {
    background-position: -100% 0;
  }
  100% {
    background-position: 200% 0;
  }
}

.flow-light {
  background: linear-gradient(90deg, transparent, rgba(255,255,255,0.8), transparent);
  background-size: 200% 100%;
  animation: lightFlow 2s linear infinite;
}
// 添加流光类名
document.getElementById('target').classList.add('flow-light');

Canvas动态绘制

使用Canvas实现更灵活的流光效果:

const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
document.body.appendChild(canvas);

let pos = 0;
function animate() {
  ctx.clearRect(0, 0, canvas.width, canvas.height);

  // 创建渐变
  const gradient = ctx.createLinearGradient(pos, 0, pos+100, 0);
  gradient.addColorStop(0, 'transparent');
  gradient.addColorStop(0.5, 'rgba(255,255,255,0.8)');
  gradient.addColorStop(1, 'transparent');

  ctx.fillStyle = gradient;
  ctx.fillRect(0, 0, canvas.width, canvas.height);

  pos = (pos + 2) % canvas.width;
  requestAnimationFrame(animate);
}
animate();

SVG滤镜实现

利用SVG滤镜创建高级流光效果:

<svg width="0" height="0">
  <filter id="lightFlow">
    <feGaussianBlur stdDeviation="3" result="blur"/>
    <feComposite operator="out" in="SourceGraphic" in2="blur"/>
    <feDisplacementMap scale="10" xChannelSelector="R" yChannelSelector="G"/>
  </filter>
</svg>

<script>
  document.getElementById('target').style.filter = "url(#lightFlow)";
</script>

WebGL高性能实现

对于复杂场景可使用Three.js等库:

js实现流光

import * as THREE from 'three';

const scene = new THREE.Scene();
const renderer = new THREE.WebGLRenderer();
const geometry = new THREE.PlaneGeometry();
const material = new THREE.ShaderMaterial({
  uniforms: {
    time: { value: 0 }
  },
  vertexShader: `...`, // 自定义着色器
  fragmentShader: `...` // 包含流光计算逻辑
});

function animate() {
  material.uniforms.time.value += 0.01;
  renderer.render(scene, camera);
  requestAnimationFrame(animate);
}

实现要点

  1. 性能优化:对移动设备减少动画复杂度
  2. 颜色调整:根据场景需求修改渐变颜色
  3. 方向控制:通过修改CSS角度或Canvas坐标改变流动方向
  4. 响应式设计:监听resize事件调整效果尺寸

每种方法适用于不同场景,CSS方案适合简单UI元素,Canvas/SVG适合自定义图形,WebGL适合复杂视觉效果。

标签: 流光js
分享给朋友:

相关文章

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <di…

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…

js计算器的实现

js计算器的实现

实现基础结构 HTML部分需要创建计算器的基本框架,包含显示区域和按钮。使用<div>容器包裹整个计算器,内部设置一个显示屏和多个按钮。 <div class="calculato…

实现继承js

实现继承js

实现继承的方式 在JavaScript中,实现继承可以通过多种方式完成,每种方式都有其优缺点。以下是几种常见的实现继承的方法: 原型链继承 原型链继承是最基本的继承方式,通过将子类的原型指向父类的实…

js实现弹框

js实现弹框

使用 alert 实现简单弹框 JavaScript 的 alert 方法可以直接显示一个简单的弹框,内容为纯文本: alert("这是一个简单的弹框"); 使用 confirm 实现确认弹框…