当前位置:首页 > JavaScript

js实现晃动

2026-03-14 12:00:51JavaScript

实现元素晃动效果的方法

使用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添加/移除类名触发动画:

const element = document.getElementById('target');
element.classList.add('shake-element');

// 动画结束后移除类名
element.addEventListener('animationend', () => {
  element.classList.remove('shake-element');
});

使用JavaScript直接操作样式

通过定时器实现晃动效果:

function shakeElement(element, duration = 500, distance = 5) {
  const startTime = Date.now();
  const originalPosition = element.style.transform || 'translateX(0)';

  function updateShake() {
    const elapsed = Date.now() - startTime;
    if (elapsed >= duration) {
      element.style.transform = originalPosition;
      return;
    }

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

    requestAnimationFrame(updateShake);
  }

  updateShake();
}

// 使用示例
const box = document.getElementById('box');
shakeElement(box);

实现3D晃动效果

创建更立体的晃动动画:

@keyframes shake3d {
  0% { transform: translate(0, 0, 0) rotate(0); }
  20% { transform: translate(-5px, 0, -5px) rotate(-5deg); }
  40% { transform: translate(5px, 0, 5px) rotate(5deg); }
  60% { transform: translate(-5px, 0, -5px) rotate(-5deg); }
  80% { transform: translate(5px, 0, 5px) rotate(5deg); }
  100% { transform: translate(0, 0, 0) rotate(0); }
}

实现重力感晃动

模拟物理效果的晃动:

js实现晃动

function physicsShake(element, power = 1) {
  let velocity = 0;
  let position = 0;
  const stiffness = 0.3;
  const damping = 0.8;

  // 初始冲击
  velocity = -10 * power;

  function update() {
    const acceleration = -stiffness * position - damping * velocity;
    velocity += acceleration;
    position += velocity;

    element.style.transform = `translateX(${position}px)`;

    if (Math.abs(position) < 0.1 && Math.abs(velocity) < 0.1) {
      element.style.transform = '';
      return;
    }

    requestAnimationFrame(update);
  }

  update();
}

这些方法可以根据具体需求进行调整,改变晃动幅度、持续时间或添加其他动画效果。CSS方法性能更好,而JavaScript方法提供更精细的控制能力。

标签: js
分享给朋友:

相关文章

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现验证码

js实现验证码

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

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…