当前位置:首页 > 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控制动画:

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是专业的动画库,可以实现复杂的动画序列:

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();

响应式滚动动画

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

js实现图片动画

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在目标浏览器中可用

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

相关文章

vue实现gif动画

vue实现gif动画

Vue 中实现 GIF 动画的方法 在 Vue 中实现 GIF 动画可以通过多种方式完成,具体取决于需求和使用场景。以下是几种常见的方法: 直接使用 <img> 标签加载 GIF 最简单…

vue点击实现动画

vue点击实现动画

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

vue实现放大图片

vue实现放大图片

实现图片放大功能的方法 在Vue中实现图片放大功能,可以通过多种方式实现。以下是几种常见的方法: 使用CSS transform属性 通过CSS的transform: scale()属性实现图片放…

vue图片实现多选

vue图片实现多选

Vue 图片多选实现方法 在 Vue 中实现图片多选功能可以通过以下几种方式完成,具体取决于项目需求和复杂度。 使用 v-model 和数组存储选中状态 通过 v-model 绑定一个数组来记录选中…

react如何引用图片

react如何引用图片

在React中引用图片的方法 使用import直接引入图片 在React组件中,可以通过import语句将图片作为模块引入。这种方式适合在组件内部使用图片,Webpack会处理图片的路径和打包。 i…

vue实现无缝图片

vue实现无缝图片

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