当前位置:首页 > 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 实现高性能逐帧动画,适合需要精细控制的场景。

js实现图片动画

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,性能优异且语法简洁。

js实现图片动画

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 适合现代浏览器环境,第三方库适合复杂动画序列,视差效果则常用于页面滚动交互。

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

相关文章

网页制作css图片切换

网页制作css图片切换

CSS图片切换的实现方法 使用CSS实现图片切换可以通过多种方式完成,以下是几种常见的方法: 纯CSS轮播图 通过CSS动画和关键帧实现自动轮播效果。定义一个容器,内部放置多个图片,利用anima…

vue的动画实现

vue的动画实现

Vue 动画实现方式 Vue 提供了多种方式实现动画效果,主要包括内置组件和第三方库。 使用 <transition> 和 <transition-group> Vue 内置…

vue实现动画

vue实现动画

Vue 动画实现方法 Vue 提供了多种方式实现动画效果,主要通过内置组件和 CSS 过渡/动画实现。 使用 <transition> 组件 Vue 的 <transition&g…

vue实现图片单选

vue实现图片单选

Vue 实现图片单选功能 在 Vue 中实现图片单选功能可以通过多种方式完成,以下是两种常见的实现方法: 方法一:使用 v-model 和单选按钮 通过将单选按钮与图片绑定,利用 v-model 管…

vue实现路由动画

vue实现路由动画

路由动画的实现方法 在Vue中实现路由动画通常结合<transition>组件和Vue Router的导航守卫。以下是几种常见实现方式: 基础过渡动画 <template>…

vue 实现图片单选

vue 实现图片单选

Vue 实现图片单选功能 在 Vue 中实现图片单选功能,可以通过结合 v-model 和自定义事件来实现。以下是具体实现方法: 方法一:使用 v-model 和计算属性 创建一个 Vue 组件…