当前位置:首页 > JavaScript

js实现图片抖动效果

2026-04-04 09:18:31JavaScript

实现图片抖动效果的几种方法

使用CSS动画

通过CSS的@keyframes定义抖动动画,并应用到图片元素上。这种方法性能较好,适合简单抖动效果。

.shake {
  animation: shake 0.5s infinite;
}

@keyframes shake {
  0% { transform: translateX(0); }
  25% { transform: translateX(-5px); }
  50% { transform: translateX(5px); }
  75% { transform: translateX(-5px); }
  100% { transform: translateX(0); }
}
const img = document.querySelector('img');
img.classList.add('shake');

使用JavaScript定时器

通过setInterval不断修改图片位置实现抖动效果,适合需要更复杂控制的场景。

function shakeImage(element, duration = 500, distance = 5) {
  const startTime = Date.now();
  const originalPosition = element.style.transform || 'translateX(0)';

  const interval = setInterval(() => {
    const elapsed = Date.now() - startTime;
    if (elapsed >= duration) {
      clearInterval(interval);
      element.style.transform = originalPosition;
      return;
    }

    const progress = elapsed / duration;
    const offset = Math.sin(progress * Math.PI * 10) * distance;
    element.style.transform = `translateX(${offset}px)`;
  }, 16);
}

// 使用示例
const img = document.querySelector('img');
shakeImage(img, 1000, 10);

使用GSAP动画库

GreenSock Animation Platform (GSAP)提供更强大的动画控制能力。

// 先引入GSAP库
gsap.to("img", {
  x: 10,
  duration: 0.1,
  repeat: 5,
  yoyo: true,
  ease: "power1.inOut"
});

三维抖动效果

结合CSS 3D变换创建更生动的抖动效果。

.shake-3d {
  animation: shake3d 0.8s infinite;
}

@keyframes shake3d {
  0%, 100% { transform: translate3d(0, 0, 0); }
  20% { transform: translate3d(-5px, 0, 5px); }
  40% { transform: translate3d(5px, 0, -5px); }
  60% { transform: translate3d(-5px, 0, -5px); }
  80% { transform: translate3d(5px, 0, 5px); }
}

随机抖动算法

通过随机数生成更自然的抖动效果。

js实现图片抖动效果

function randomShake(element, duration = 1000) {
  const startTime = Date.now();
  const originalTransform = element.style.transform;

  const animate = () => {
    const elapsed = Date.now() - startTime;
    if (elapsed >= duration) {
      element.style.transform = originalTransform;
      return;
    }

    const x = (Math.random() * 10) - 5;
    const y = (Math.random() * 10) - 5;
    element.style.transform = `translate(${x}px, ${y}px)`;
    requestAnimationFrame(animate);
  };

  animate();
}

每种方法都有其适用场景,CSS动画适合简单需求,JavaScript实现提供更多控制,GSAP适合复杂动画,3D效果和随机算法可以创建更丰富的视觉效果。

标签: 效果图片
分享给朋友:

相关文章

vue实现预览效果

vue实现预览效果

Vue 实现预览效果的方法 使用 v-html 指令实现简单预览 在 Vue 中可以通过 v-html 指令直接将 HTML 字符串渲染到页面上,适用于简单的富文本预览场景。 <templat…

vue实现图片查看

vue实现图片查看

实现图片查看功能 在Vue中实现图片查看功能可以通过多种方式完成,常见的有使用原生HTML5的<dialog>元素、第三方组件库(如Element UI、Vant等)或专用插件(如view…

vue实现气泡效果

vue实现气泡效果

实现气泡效果的方法 在Vue中实现气泡效果可以通过CSS动画、第三方库或自定义组件完成。以下是几种常见方法: 使用纯CSS动画 通过CSS的@keyframes和transform属性创建气泡上升动…

uniapp 卡片效果

uniapp 卡片效果

uniapp 实现卡片效果的方法 使用 view 和 CSS 样式 通过 view 组件结合 CSS 样式可以快速实现卡片效果。设置圆角、阴影和边距来增强视觉层次感。 <view cl…

h5实现左右滚动效果

h5实现左右滚动效果

使用CSS实现横向滚动 在HTML5中实现左右滚动效果,可以通过CSS的overflow-x属性配合white-space或flex布局实现。以下是一个基础示例: <div class="sc…

vue实现基金效果

vue实现基金效果

Vue 实现基金效果 在 Vue 中实现基金效果,通常指的是模拟基金的增长、波动或可视化展示。以下是几种常见的实现方式: 数据绑定与动态更新 通过 Vue 的数据绑定特性,可以动态展示基金净值的变化…