当前位置:首页 > JavaScript

js实现图片动画

2026-03-15 13:29:48JavaScript

使用CSS动画与JavaScript结合

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

// 定义CSS动画关键帧
const style = document.createElement('style');
style.innerHTML = `
  @keyframes fadeInScale {
    0% { opacity: 0; transform: scale(0.5); }
    100% { opacity: 1; transform: scale(1); }
  }
  .animate-image {
    animation: fadeInScale 1s ease-out forwards;
  }
`;
document.head.appendChild(style);

// 获取图片元素并添加动画类
const img = document.getElementById('targetImage');
img.classList.add('animate-image');

使用Web Animations API

现代浏览器支持的Web Animations API可以直接用JavaScript控制动画:

js实现图片动画

const img = document.getElementById('targetImage');
img.animate([
  { transform: 'rotate(0deg)', opacity: 0 },
  { transform: 'rotate(360deg)', opacity: 1 }
], {
  duration: 1000,
  iterations: 1,
  easing: 'ease-in-out'
});

Canvas动画实现

对于需要像素级控制的复杂动画,可以使用Canvas:

const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
const img = new Image();
img.src = 'image.jpg';

let angle = 0;
function animate() {
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  ctx.save();
  ctx.translate(canvas.width/2, canvas.height/2);
  ctx.rotate(angle);
  ctx.drawImage(img, -img.width/2, -img.height/2);
  ctx.restore();
  angle += 0.01;
  requestAnimationFrame(animate);
}
img.onload = animate;

使用GSAP库

GSAP是专业的动画库,可以实现复杂的动画序列:

js实现图片动画

import { gsap } from "gsap";

gsap.to("#image", {
  duration: 1.5,
  x: 100,
  rotation: 360,
  ease: "bounce.out",
  opacity: 0.5
});

SVG图片动画

对SVG图片可以直接操作其属性实现动画:

const svgImage = document.getElementById('svg-image');
function pulse() {
  svgImage.animate([
    { transform: 'scale(1)', fill: '#ff0000' },
    { transform: 'scale(1.2)', fill: '#00ff00' },
    { transform: 'scale(1)', fill: '#0000ff' }
  ], {
    duration: 1500,
    iterations: Infinity
  });
}
pulse();

响应式滚动动画

实现图片随页面滚动变化的动画效果:

window.addEventListener('scroll', () => {
  const scrollY = window.scrollY;
  const img = document.getElementById('parallax-img');
  img.style.transform = `translateY(${scrollY * 0.5}px) scale(${1 - scrollY * 0.001})`;
});

注意事项

  1. 性能优化:使用transformopacity属性实现动画,避免使用left/top等会触发重排的属性
  2. 硬件加速:对需要高性能动画的元素添加will-change: transformtransform: translateZ(0)
  3. 动画节流:对滚动等频繁触发的事件使用requestAnimationFrame进行节流
  4. 兼容性检查:使用特性检测确保API在目标浏览器中可用

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

相关文章

jquery 动画

jquery 动画

jQuery 动画基础 jQuery 提供了一系列动画方法,用于实现元素的动态效果,如淡入淡出、滑动、自定义动画等。 常用动画方法 fadeIn() / fadeOut(): 元素的淡入和…

H5图片实现地图

H5图片实现地图

实现H5图片地图的方法 在H5中实现图片地图功能,可以通过以下方式完成。图片地图允许用户在图片的特定区域点击,触发不同的交互效果。 使用HTML的<map>和<area>标签…

vue加载动画实现

vue加载动画实现

Vue 加载动画实现方法 使用 CSS 动画或过渡 在 Vue 组件中可以直接通过 CSS 实现加载动画效果。定义一个简单的旋转动画: .loading-spinner { width: 40p…

vue实现无缝图片

vue实现无缝图片

实现无缝图片轮播的方法 在Vue中实现无缝图片轮播,可以通过以下步骤完成。这种方法利用Vue的响应式特性和CSS动画,确保图片切换平滑且无缝。 使用vue-awesome-swiper库 安装vue…

vue实现进入动画

vue实现进入动画

Vue 进入动画实现方法 使用 Vue 的过渡系统实现进入动画,主要通过 <transition> 或 <transition-group> 组件结合 CSS 或 JavaSc…

vue实现展示图片

vue实现展示图片

在 Vue 中展示图片的方法 静态图片展示 静态图片通常存放在项目的 public 或 assets 目录下。使用 img 标签直接引用。 <template> <img sr…