当前位置:首页 > JavaScript

js实现摇摆

2026-03-14 06:38:10JavaScript

实现摇摆动画的 JavaScript 方法

使用 CSS 动画结合 JavaScript 触发

通过定义 CSS 关键帧动画实现摇摆效果,JavaScript 用于动态添加或移除动画类。CSS 部分定义 @keyframes,例如:

@keyframes swing {
  0% { transform: rotate(0deg); }
  20% { transform: rotate(15deg); }
  40% { transform: rotate(-10deg); }
  60% { transform: rotate(5deg); }
  80% { transform: rotate(-5deg); }
  100% { transform: rotate(0deg); }
}

.swing-animation {
  animation: swing 1s ease-in-out;
}

JavaScript 通过事件触发动画:

element.addEventListener('click', () => {
  element.classList.add('swing-animation');
  setTimeout(() => element.classList.remove('swing-animation'), 1000);
});

纯 JavaScript 实现(使用 requestAnimationFrame)

js实现摇摆

通过逐帧修改元素的 transform 属性实现更灵活的控制:

function swing(element, amplitude = 15, duration = 1000) {
  const startTime = performance.now();
  function animate(currentTime) {
    const elapsed = currentTime - startTime;
    const progress = Math.min(elapsed / duration, 1);
    const angle = amplitude * Math.sin(progress * Math.PI * 2) * (1 - progress);
    element.style.transform = `rotate(${angle}deg)`;
    if (progress < 1) requestAnimationFrame(animate);
  }
  requestAnimationFrame(animate);
}

使用 GSAP 库实现高级效果

js实现摇摆

引入 GSAP 库可简化复杂动画序列:

gsap.to(element, {
  rotation: 15,
  duration: 0.2,
  repeat: 3,
  yoyo: true,
  ease: "sine.inOut"
});

物理模拟摇摆(阻尼效果)

模拟真实物理摆动,包含速度衰减:

let angle = 0, velocity = 0, damping = 0.9;
function physicsSwing() {
  velocity += (-angle * 0.1 - velocity * 0.1);
  angle += velocity;
  element.style.transform = `rotate(${angle}deg)`;
  if (Math.abs(angle) > 0.01 || Math.abs(velocity) > 0.01) {
    requestAnimationFrame(physicsSwing);
  }
}
// 触发初始速度
velocity = 5;
physicsSwing();

标签: js
分享给朋友:

相关文章

js实现验证码

js实现验证码

实现验证码的JavaScript方法 生成随机验证码 使用Math.random()生成随机字符串,结合数字和字母: function generateCaptcha() { const cha…

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callback) {…

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js 实现继承

js 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Par…

js实现复制到剪贴板

js实现复制到剪贴板

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

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…