当前位置:首页 > JavaScript

js实现晃动

2026-02-01 13:10:28JavaScript

实现元素晃动效果的方法

使用CSS动画结合JavaScript触发晃动效果是一种常见方式。以下是一个简单的实现方案:

CSS部分

js实现晃动

.shake {
  animation: shake 0.5s cubic-bezier(.36,.07,.19,.97) both;
}

@keyframes shake {
  10%, 90% { transform: translate3d(-1px, 0, 0); }
  20%, 80% { transform: translate3d(2px, 0, 0); }
  30%, 50%, 70% { transform: translate3d(-4px, 0, 0); }
  40%, 60% { transform: translate3d(4px, 0, 0); }
}

JavaScript部分

function shakeElement(element) {
  element.classList.add('shake');
  element.addEventListener('animationend', () => {
    element.classList.remove('shake');
  }, {once: true});
}

// 使用示例
const button = document.querySelector('#myButton');
button.addEventListener('click', () => shakeElement(button));

物理模拟晃动效果

使用requestAnimationFrame实现更自然的物理晃动:

js实现晃动

function physicsShake(element, intensity = 10, decay = 0.8) {
  let x = 0;
  let velocity = intensity;
  const originalX = element.offsetLeft;

  function animate() {
    x += velocity;
    velocity *= -decay;
    element.style.transform = `translateX(${x}px)`;

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

  animate();
}

使用GSAP库实现高级晃动

GSAP提供更强大的动画控制:

// 引入GSAP后使用
gsap.to(element, {
  x: "+=10",
  repeat: 5,
  yoyo: true,
  duration: 0.1,
  ease: "power1.inOut"
});

响应式晃动组件实现

创建一个可复用的晃动组件类:

class Shaker {
  constructor(element) {
    this.element = element;
  }

  shake(options = {}) {
    const {
      intensity = 10,
      duration = 500,
      decay = 0.85
    } = options;

    const startTime = performance.now();

    const animate = (time) => {
      const elapsed = time - startTime;
      const progress = elapsed / duration;

      if (progress >= 1) {
        this.element.style.transform = '';
        return;
      }

      const shakeValue = intensity * Math.sin(progress * 20) * (1 - progress);
      this.element.style.transform = `translateX(${shakeValue}px)`;

      requestAnimationFrame(animate);
    };

    requestAnimationFrame(animate);
  }
}

// 使用示例
const shaker = new Shaker(document.getElementById('element'));
shaker.shake({ intensity: 15, duration: 1000 });

注意事项

  • 晃动动画应考虑性能影响,避免在低端设备上过度使用
  • 晃动幅度应根据元素大小和使用场景适当调整
  • 确保晃动结束后元素恢复原始位置
  • 移动端设备可能需要调整晃动参数以获得更好的触觉反馈效果

标签: js
分享给朋友:

相关文章

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js实现视口

js实现视口

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

js实现表单验证提交表单提交表单提交

js实现表单验证提交表单提交表单提交

表单验证与提交的实现 在JavaScript中实现表单验证并提交表单,可以通过监听表单的提交事件,进行验证后决定是否提交。以下是实现方法: 基础表单验证 通过监听表单的submit事件,阻止默认提交…

js和jquery

js和jquery

JavaScript 与 jQuery 的关系与区别 JavaScript 是一种动态编程语言,主要用于网页开发,使网页具有交互性。它是浏览器的原生脚本语言,可以直接在浏览器中运行。 jQuery…