当前位置:首页 > JavaScript

js实现特效

2026-03-15 08:40:42JavaScript

JavaScript 实现常见特效的方法

鼠标悬停效果
通过监听mouseovermouseout事件改变元素样式:

element.addEventListener('mouseover', () => {
  element.style.transform = 'scale(1.1)';
  element.style.transition = 'all 0.3s';
});
element.addEventListener('mouseout', () => {
  element.style.transform = 'scale(1)';
});

滚动动画
使用IntersectionObserver实现滚动视差效果:

const observer = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      entry.target.classList.add('animate');
    }
  });
});
document.querySelectorAll('.scroll-item').forEach(item => observer.observe(item));

粒子效果
Canvas实现基础粒子动画:

const canvas = document.getElementById('particle-canvas');
const ctx = canvas.getContext('2d');
const particles = Array(100).fill().map(() => ({
  x: Math.random() * canvas.width,
  y: Math.random() * canvas.height,
  size: Math.random() * 5 + 1,
  speedX: Math.random() * 3 - 1.5,
  speedY: Math.random() * 3 - 1.5
}));

function animate() {
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  particles.forEach(p => {
    p.x += p.speedX;
    p.y += p.speedY;
    ctx.fillStyle = 'rgba(255,255,255,0.8)';
    ctx.beginPath();
    ctx.arc(p.x, p.y, p.size, 0, Math.PI * 2);
    ctx.fill();
  });
  requestAnimationFrame(animate);
}
animate();

特效优化技巧

性能优化
使用requestAnimationFrame替代setTimeout实现动画循环,避免布局抖动(Layout Thrashing):

function optimizedAnimation() {
  const elements = document.querySelectorAll('.animate-me');
  requestAnimationFrame(() => {
    elements.forEach(el => {
      const position = el.getBoundingClientRect().top; // 批量读取
      el.style.transform = `translateY(${position * 0.1}px)`; // 批量写入
    });
  });
}

硬件加速
通过触发GPU加速提升动画流畅度:

.accelerated {
  transform: translateZ(0);
  will-change: transform;
}

特效库推荐

轻量级选择

  • Anime.js:支持复杂时间线控制的动画库(12KB)
  • GSAP:专业级动画工具集,适合复杂场景
  • Particles.js:专攻粒子效果的轻量库

实现3D特效
Three.js基础示例:

js实现特效

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

const geometry = new THREE.BoxGeometry();
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);
camera.position.z = 5;

function animate() {
  cube.rotation.x += 0.01;
  cube.rotation.y += 0.01;
  renderer.render(scene, camera);
  requestAnimationFrame(animate);
}
animate();

标签: 特效js
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 或直接使用 window.location 实现页面跳转,适用于普通跳转或带参数的 URL。 // 方…

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <htm…

js 实现验证码

js 实现验证码

实现验证码的 JavaScript 方法 生成随机验证码 验证码通常由随机字符(数字、字母或混合)组成。以下代码生成一个 6 位随机验证码(数字和字母混合): function generateCa…

js 多选 实现

js 多选 实现

实现多选的 JavaScript 方法 使用复选框(Checkbox)实现多选 通过 HTML 的 checkbox 元素配合 JavaScript 实现多选功能。用户可以选择多个选项,提交时获取所有…