当前位置:首页 > JavaScript

js实现光圈效果

2026-03-01 09:32:16JavaScript

实现光圈效果的JavaScript方法

光圈效果可以通过多种方式实现,包括CSS动画、Canvas绘图或WebGL。以下是几种常见的实现方法:

使用CSS和JavaScript结合

通过CSS定义动画效果,JavaScript控制触发时机:

.aura {
  width: 100px;
  height: 100px;
  border-radius: 50%;
  position: absolute;
  box-shadow: 0 0 20px 10px rgba(0, 150, 255, 0.5);
  animation: pulse 2s infinite;
}

@keyframes pulse {
  0% { transform: scale(1); opacity: 1; }
  50% { transform: scale(1.2); opacity: 0.7; }
  100% { transform: scale(1); opacity: 1; }
}
const element = document.createElement('div');
element.className = 'aura';
document.body.appendChild(element);

使用Canvas绘制动态光圈

Canvas提供了更灵活的控制方式:

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

canvas.width = window.innerWidth;
canvas.height = window.innerHeight;

let radius = 0;
let growing = true;

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

  ctx.beginPath();
  ctx.arc(canvas.width/2, canvas.height/2, radius, 0, Math.PI*2);
  ctx.strokeStyle = `rgba(0, 150, 255, ${1 - radius/200})`;
  ctx.lineWidth = 10;
  ctx.stroke();

  if(growing) {
    radius += 2;
    if(radius > 200) growing = false;
  } else {
    radius -= 2;
    if(radius < 10) growing = true;
  }

  requestAnimationFrame(animate);
}

animate();

使用WebGL实现高级光圈效果

对于更复杂的光圈效果,WebGL是更好的选择:

// 初始化WebGL上下文
const canvas = document.createElement('canvas');
document.body.appendChild(canvas);
const gl = canvas.getContext('webgl');

// 顶点着色器
const vsSource = `
  attribute vec2 aPosition;
  void main() {
    gl_Position = vec4(aPosition, 0.0, 1.0);
  }
`;

// 片段着色器
const fsSource = `
  precision mediump float;
  uniform vec2 uResolution;
  uniform float uTime;

  void main() {
    vec2 uv = gl_FragCoord.xy / uResolution;
    float dist = distance(uv, vec2(0.5));
    float glow = 0.05 / dist * sin(uTime);
    gl_FragColor = vec4(0.0, 0.5, 1.0, glow);
  }
`;

// 编译着色器程序
const shaderProgram = initShaderProgram(gl, vsSource, fsSource);
// 绘制逻辑
function render(time) {
  // 设置uniform
  gl.uniform1f(gl.getUniformLocation(shaderProgram, 'uTime'), time/1000);
  // 绘制
  gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
  requestAnimationFrame(render);
}
requestAnimationFrame(render);

使用GSAP动画库

GSAP可以简化动画实现:

js实现光圈效果

import { gsap } from 'gsap';

const circle = document.createElement('div');
circle.style.cssText = `
  width: 100px; height: 100px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(0,150,255,0.8) 0%, transparent 70%);
  position: absolute;
`;
document.body.appendChild(circle);

gsap.to(circle, {
  scale: 1.5,
  opacity: 0.5,
  duration: 2,
  repeat: -1,
  yoyo: true,
  ease: "sine.inOut"
});

实现光圈效果的注意事项

  • 性能优化:对于大量光圈效果,建议使用Canvas或WebGL而非DOM元素
  • 移动端适配:考虑触摸事件触发光圈效果
  • 颜色自定义:可以通过HSL颜色模型或渐变实现多彩光圈
  • 交互增强:光圈效果可以响应鼠标位置或触摸位置

以上方法可以根据具体需求选择或组合使用,CSS方法最简单,Canvas方法更灵活,WebGL方法性能最好但实现复杂度最高。

标签: 光圈效果
分享给朋友:

相关文章

vue实现检索效果

vue实现检索效果

Vue实现检索功能的方法 在Vue中实现检索功能通常需要结合数据绑定、计算属性和方法。以下是几种常见的实现方式: 基础实现(基于计算属性) <template> <div>…

vue实现滑动效果

vue实现滑动效果

Vue 实现滑动效果的方法 在 Vue 中实现滑动效果可以通过多种方式,包括使用 CSS 过渡、第三方动画库或直接操作 DOM。以下是几种常见的方法: 使用 CSS 过渡和 Vue 的 <tr…

vue实现菜单效果

vue实现菜单效果

Vue实现菜单效果的方法 基础菜单实现 使用Vue的v-for指令和v-show/v-if可以快速实现基础菜单。通过数据驱动的方式渲染菜单项,结合事件处理实现交互。 <template>…

vue实现的效果

vue实现的效果

Vue.js 是一个流行的前端框架,用于构建用户界面和单页应用。以下是一些常见的 Vue 实现效果及其实现方式: 动态数据绑定 Vue 的核心特性之一是响应式数据绑定。通过将数据与 DOM 元素绑定…

vue实现点击效果

vue实现点击效果

实现点击效果的方法 在Vue中实现点击效果可以通过多种方式完成,以下是几种常见的实现方法: 使用v-on或@click绑定事件 通过v-on:click或简写@click绑定点击事件,触发方法或直…

vue 实现过渡效果

vue 实现过渡效果

Vue 过渡效果实现方法 Vue 提供了 <transition> 和 <transition-group> 组件,用于在元素插入、更新或移除时应用动画效果。以下是具体实现方式…