当前位置:首页 > JavaScript

js实现晃动

2026-04-06 05:58:42JavaScript

实现晃动效果的方法

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

CSS动画实现

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

@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动态实现

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

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

物理引擎实现

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

js实现晃动

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实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数: fun…

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: Int…

js验证码的实现

js验证码的实现

验证码的基本实现原理 验证码(CAPTCHA)的核心目标是区分人类用户和自动化程序。JavaScript可用于生成或验证客户端验证码,但需注意纯前端验证可能被绕过,通常需结合后端验证。 纯前端验证码…