当前位置:首页 > JavaScript

js实现图片动画

2026-02-02 13:23:18JavaScript

使用 CSS 动画结合 JavaScript 控制

通过 JavaScript 动态添加或移除 CSS 类来实现图片动画效果。CSS 定义动画关键帧,JavaScript 控制触发时机。

/* CSS 部分 */
.animate-image {
  animation: fadeIn 2s ease-in-out;
}

@keyframes fadeIn {
  from { opacity: 0; transform: scale(0.8); }
  to { opacity: 1; transform: scale(1); }
}
// JavaScript 部分
const img = document.querySelector('img');
img.addEventListener('click', () => {
  img.classList.add('animate-image');

  // 动画结束后移除类名以便重复触发
  img.addEventListener('animationend', () => {
    img.classList.remove('animate-image');
  });
});

纯 JavaScript 动画实现

使用 requestAnimationFrame 实现高性能逐帧动画,适合需要精细控制的场景。

function animateImage(element, duration) {
  const startTime = performance.now();

  function update(time) {
    const elapsed = time - startTime;
    const progress = Math.min(elapsed / duration, 1);

    // 自定义动画效果
    element.style.opacity = progress;
    element.style.transform = `scale(${1 + 0.5 * Math.sin(progress * Math.PI)})`;

    if (progress < 1) {
      requestAnimationFrame(update);
    }
  }

  requestAnimationFrame(update);
}

// 使用示例
const img = document.getElementById('animated-img');
animateImage(img, 1000); // 1秒动画

使用 Web Animations API

现代浏览器原生支持的动画 API,性能优异且语法简洁。

const img = document.querySelector('img');
img.animate([
  { transform: 'rotate(0deg)', opacity: 0 },
  { transform: 'rotate(360deg)', opacity: 1 }
], {
  duration: 1000,
  easing: 'cubic-bezier(0.42, 0, 0.58, 1)',
  iterations: Infinity
});

第三方动画库方案

使用 GSAP 等专业动画库实现复杂效果,示例代码:

// 需先引入GSAP库
gsap.to(".image-element", {
  duration: 1.5,
  x: 100,
  rotation: 360,
  ease: "elastic.out(1, 0.5)",
  stagger: 0.1
});

响应式视差动画

结合滚动事件实现视差效果,增强用户体验。

window.addEventListener('scroll', () => {
  const scrollY = window.scrollY;
  const img = document.getElementById('parallax-img');

  // 根据滚动位置计算位移
  const offset = scrollY * 0.5;
  img.style.transform = `translateY(${offset}px)`;
});

每种方法适用于不同场景:CSS 动画适合简单过渡效果,纯 JavaScript 实现适合需要精确控制的动画,Web Animations API 适合现代浏览器环境,第三方库适合复杂动画序列,视差效果则常用于页面滚动交互。

js实现图片动画

标签: 动画图片
分享给朋友:

相关文章

vue实现图片循环

vue实现图片循环

实现图片循环的基本方法 在Vue中实现图片循环通常使用v-for指令结合数组数据。以下是基础实现方式: <template> <div> <img v-fo…

vue哪个组件实现动画

vue哪个组件实现动画

在Vue中实现动画效果,可以通过以下组件和方法实现: Vue内置动画组件 Vue提供了<transition>和<transition-group>两个内置组件,用于处理进…

vue2实现图片懒加载

vue2实现图片懒加载

实现图片懒加载的方法 在Vue2中实现图片懒加载可以通过以下方法完成,核心原理是监听图片是否进入可视区域,再动态加载图片资源。 使用IntersectionObserver API Interse…

react如何动画

react如何动画

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

vue点击实现动画

vue点击实现动画

Vue 中实现点击动画的方法 使用 CSS 过渡和 Vue 的 v-on 指令 在 Vue 模板中绑定 @click 事件,通过修改数据属性触发 CSS 过渡效果。示例代码: <templa…

vue实现图片取色

vue实现图片取色

Vue 实现图片取色功能 在 Vue 中实现图片取色功能,可以通过 Canvas API 获取图片像素数据,并提取颜色信息。以下是具体实现方法: 使用 Canvas 获取图片颜色数据 创建 Canv…