当前位置:首页 > JavaScript

js实现动画

2026-02-28 17:15:25JavaScript

使用CSS动画实现简单效果

通过@keyframes定义动画关键帧,结合element.style.animation属性控制播放。适合简单过渡效果(如渐变、位移)。

// 定义CSS动画
const style = document.createElement('style');
style.innerHTML = `
  @keyframes fadeIn {
    from { opacity: 0; }
    to { opacity: 1; }
  }
`;
document.head.appendChild(style);

// 应用动画
const element = document.getElementById('target');
element.style.animation = 'fadeIn 2s ease-in-out';

使用requestAnimationFrame实现高性能动画

通过递归调用requestAnimationFrame实现逐帧控制,适合复杂动画(如游戏、物理模拟)。

let startTime = null;
function animate(timestamp) {
  if (!startTime) startTime = timestamp;
  const progress = timestamp - startTime;

  // 计算动画状态(例如旋转角度)
  const rotation = (progress / 1000) * 360; // 1秒旋转360度
  element.style.transform = `rotate(${rotation}deg)`;

  if (progress < 2000) { // 动画持续2秒
    requestAnimationFrame(animate);
  }
}
requestAnimationFrame(animate);

使用GSAP等动画库

GSAP提供更强大的时间轴控制和复杂动画序列。适合需要精细管理的场景。

// 安装GSAP后使用
gsap.to("#target", {
  duration: 1,
  x: 100,
  rotation: 360,
  ease: "bounce.out"
});

使用Web Animations API

原生API支持组合动画和精确控制,兼容现代浏览器。

js实现动画

const element = document.getElementById('target');
element.animate(
  [
    { transform: 'translateX(0px)', opacity: 1 },
    { transform: 'translateX(100px)', opacity: 0.5 }
  ],
  {
    duration: 800,
    easing: 'ease-in-out',
    iterations: Infinity
  }
);

性能优化建议

  • 优先使用CSS动画或transform/opacity属性(触发硬件加速)。
  • 避免频繁操作DOM或触发重排(如读取offsetHeight)。
  • 使用will-change提示浏览器优化:
    .target {
      will-change: transform, opacity;
    }

标签: 动画js
分享给朋友:

相关文章

利用css3制作动画

利用css3制作动画

CSS3 动画基础 CSS3 通过 @keyframes 规则和 animation 属性实现动画效果。@keyframes 定义动画的关键帧,animation 控制动画的播放方式(如持续时间、延迟…

react如何动画

react如何动画

React 动画实现方法 React 中实现动画可以通过多种方式,包括原生 CSS、第三方库或 React 内置的动画解决方案。以下是几种常见方法: 使用 CSS 动画和过渡 通过 CSS 的 tr…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现延迟

js实现延迟

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

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似:…

js实现正交

js实现正交

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