当前位置:首页 > JavaScript

js实现晃动

2026-04-06 05:58:42JavaScript

实现晃动效果的方法

晃动效果可以通过CSS动画或JavaScript动态改变元素位置来实现。以下是几种常见的实现方式:

CSS动画实现

通过定义关键帧动画实现晃动效果:

js实现晃动

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

.shake-element {
  animation: shake 0.5s ease-in-out;
}

使用时通过JavaScript添加/移除类名触发动画:

element.classList.add('shake-element');
setTimeout(() => element.classList.remove('shake-element'), 500);

JavaScript动态实现

通过定时器连续修改元素位置:

js实现晃动

function shake(element, duration = 500, distance = 5) {
  const startTime = Date.now();
  const animate = () => {
    const elapsed = Date.now() - startTime;
    if (elapsed >= duration) {
      element.style.transform = 'translateX(0)';
      return;
    }

    const progress = elapsed / duration;
    const oscillation = Math.sin(progress * Math.PI * 10) * distance * (1 - progress);
    element.style.transform = `translateX(${oscillation}px)`;
    requestAnimationFrame(animate);
  };
  animate();
}

使用GSAP库实现

通过专业动画库实现更流畅的效果:

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

物理引擎实现

使用带有衰减的物理模拟:

function physicsShake(element) {
  let velocity = 15;
  let position = 0;
  const damping = 0.8;

  const update = () => {
    position += velocity;
    velocity *= -damping;
    element.style.transform = `translateX(${position}px)`;

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

注意事项

  • 性能优化:优先使用CSS动画或requestAnimationFrame
  • 移动端适配:适当减小晃动幅度
  • 可访问性:避免过度动画影响用户体验
  • 恢复状态:动画结束后确保元素回到原始位置

标签: js
分享给朋友:

相关文章

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…

js实现下拉刷新

js实现下拉刷新

监听触摸事件 通过监听 touchstart、touchmove 和 touchend 事件来检测用户下拉手势。记录触摸起始位置和移动距离。 let startY = 0; let curr…

js实现定位

js实现定位

使用Geolocation API获取当前位置 在JavaScript中,可以通过浏览器内置的Geolocation API获取用户的地理位置信息。该API需要用户授权才能访问位置数据。 if (n…