当前位置:首页 > JavaScript

前端动画js实现

2026-02-02 18:49:42JavaScript

使用CSS动画与JavaScript结合

通过Element.animate()方法直接触发CSS动画,适用于简单动画场景。

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

基于requestAnimationFrame的动画

手动控制每一帧的渲染,适合需要精细控制的复杂动画。

let startTime;
function animate(timestamp) {
  if (!startTime) startTime = timestamp;
  const progress = timestamp - startTime;
  const element = document.getElementById('target');
  element.style.transform = `translateX(${Math.min(progress / 10, 200)}px)`;
  if (progress < 2000) requestAnimationFrame(animate);
}
requestAnimationFrame(animate);

使用GSAP等动画库

GSAP提供高性能的时间轴控制和复杂动画序列管理。

gsap.to("#target", {
  x: 100,
  duration: 1,
  repeat: -1,
  yoyo: true
});

Web Animations API实现

原生API支持更复杂的动画组合和状态管理。

const keyframes = [
  { transform: 'scale(1)', backgroundColor: 'red' },
  { transform: 'scale(1.5)', backgroundColor: 'blue' }
];
const options = {
  duration: 1000,
  iterations: Infinity,
  direction: 'alternate'
};
document.getElementById('target').animate(keyframes, options);

SVG动画处理

通过JavaScript动态修改SVG属性实现路径动画。

const path = document.getElementById('svg-path');
let offset = 0;
function updatePath() {
  offset += 0.01;
  path.setAttribute('stroke-dashoffset', offset);
  requestAnimationFrame(updatePath);
}
updatePath();

性能优化要点

  • 优先使用transformopacity属性触发硬件加速
  • 避免频繁的重排(reflow)操作
  • 使用will-change属性预声明动画元素
    .target {
    will-change: transform, opacity;
    }

动画缓动函数选择

通过自定义贝塞尔曲线或使用预定义缓动:

前端动画js实现

const easingFunctions = {
  easeInOut: t => t<0.5 ? 2*t*t : -1+(4-2*t)*t,
  elastic: t => (.04 - .04 / t) * Math.sin(25 * t) + 1
};

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

相关文章

js jquery

js jquery

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

js实现求导

js实现求导

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

js实现正交

js实现正交

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

js图片上传实现

js图片上传实现

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API实现基础图片上传功能。HTML部分需要设置accept="image/…

js实现 拖动

js实现 拖动

实现拖动的步骤 HTML 结构 创建一个可拖动的元素和一个放置区域: <div id="draggable" draggable="true">拖动我</div> <d…

elementui动画

elementui动画

ElementUI 动画使用指南 ElementUI 提供了内置的过渡动画效果,主要通过 Vue 的 <transition> 组件实现。以下为常见动画应用方法: 淡入淡出动画 通过 e…