当前位置:首页 > JavaScript

js实现图片抖动效果

2026-01-30 17:38:01JavaScript

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

使用CSS动画和JavaScript触发

CSS中定义关键帧动画实现抖动效果,通过JavaScript动态添加或移除类名控制动画播放。

js实现图片抖动效果

@keyframes shake {
  0%, 100% { transform: translateX(0); }
  10%, 30%, 50%, 70%, 90% { transform: translateX(-5px); }
  20%, 40%, 60%, 80% { transform: translateX(5px); }
}

.shake-effect {
  animation: shake 0.5s cubic-bezier(.36,.07,.19,.97) both;
}
const img = document.querySelector('img');
img.addEventListener('click', () => {
  img.classList.add('shake-effect');
  setTimeout(() => img.classList.remove('shake-effect'), 500);
});

纯JavaScript实现随机位移

通过定时器快速修改图片位置实现抖动,适合需要精细控制抖动的场景。

js实现图片抖动效果

function shakeImage(element, duration = 500, intensity = 5) {
  let startTime = null;
  const originalPosition = element.getBoundingClientRect();

  function animate(timestamp) {
    if (!startTime) startTime = timestamp;
    const progress = timestamp - startTime;
    const percent = Math.min(progress / duration, 1);

    const x = (Math.random() * 2 - 1) * intensity * (1 - percent);
    const y = (Math.random() * 2 - 1) * intensity * (1 - percent);

    element.style.transform = `translate(${x}px, ${y}px)`;

    if (progress < duration) {
      requestAnimationFrame(animate);
    } else {
      element.style.transform = '';
    }
  }

  requestAnimationFrame(animate);
}

// 使用示例
const img = document.getElementById('target-image');
img.addEventListener('mouseover', () => shakeImage(img));

使用GSAP动画库

GSAP提供更强大的动画控制能力,适合复杂抖动效果。

import { gsap } from "gsap";

function shakeWithGSAP(element) {
  gsap.to(element, {
    x: () => Math.random() * 10 - 5,
    y: () => Math.random() * 10 - 5,
    duration: 0.1,
    repeat: 5,
    onComplete: () => gsap.set(element, { x: 0, y: 0 })
  });
}

物理模拟抖动效果

模拟弹簧物理效果实现更自然的抖动,需要引入简单物理计算。

function physicsShake(element, power = 10) {
  let velocity = { x: power, y: -power };
  const damping = 0.8;
  const position = { x: 0, y: 0 };

  function update() {
    velocity.x *= damping;
    velocity.y *= damping;
    position.x += velocity.x;
    position.y += velocity.y;

    element.style.transform = `translate(${position.x}px, ${position.y}px)`;

    if (Math.abs(velocity.x) > 0.1 || Math.abs(velocity.y) > 0.1) {
      requestAnimationFrame(update);
    } else {
      element.style.transform = '';
    }
  }

  update();
}

注意事项

  • 性能优化:对于频繁触发的抖动效果,建议使用CSS动画或硬件加速属性如transform
  • 可访问性:避免对光敏感用户造成不适,可提供关闭选项
  • 移动端适配:可能需要调整抖动幅度以适应不同屏幕尺寸
  • 动画中止:实现清除抖动状态的方法,防止动画累积

以上方法可根据具体需求选择,CSS方案适合简单场景,JavaScript方案提供更多控制,GSAP适合复杂动画需求。

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

相关文章

h5所能实现的效果

h5所能实现的效果

H5能实现的效果 H5(HTML5)作为最新的HTML标准,具备强大的功能和丰富的API支持,能够实现多种现代Web应用效果。以下是H5的主要能力分类: 多媒体支持 H5原生支持音频和视频播放,无需…

h5实现左右滚动效果

h5实现左右滚动效果

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

vue实现图片取色

vue实现图片取色

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

js实现图片放大

js实现图片放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性实现图片放大效果。当鼠标悬停时,图片会平滑放大。 const img = document…

jquery图片放大

jquery图片放大

jQuery图片放大实现方法 使用jQuery实现图片放大功能可以通过多种方式完成,以下是几种常见且实用的方法: 使用jQuery Zoom插件 jQuery Zoom插件是一个轻量级的库,专门用于…

vue实现图片拼接

vue实现图片拼接

Vue 实现图片拼接的方法 使用 Canvas 进行图片拼接 Canvas 提供了强大的绘图能力,可以用于实现图片拼接功能。通过创建一个 Canvas 元素,将多张图片绘制到 Canvas 上,最终导…