当前位置:首页 > JavaScript

js实现晃动

2026-02-01 13:10:28JavaScript

实现元素晃动效果的方法

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

CSS部分

.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实现更自然的物理晃动:

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

js 实现vue

实现 Vue 的核心功能 在 JavaScript 中实现 Vue 的核心功能需要模拟数据绑定、虚拟 DOM 和响应式系统。以下是一个简化版的实现思路: 响应式系统 通过 Object.define…

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…