当前位置:首页 > JavaScript

js实现摆动

2026-04-06 16:07:17JavaScript

实现摆动动画的方法

使用JavaScript实现摆动动画可以通过CSS动画结合JavaScript控制,或者直接使用JavaScript操作DOM元素的样式。以下是几种常见的方法:

使用CSS动画和JavaScript触发

通过定义CSS关键帧动画,再利用JavaScript添加或移除动画类来实现摆动效果。

@keyframes swing {
  0% { transform: rotate(0deg); }
  25% { transform: rotate(15deg); }
  50% { transform: rotate(0deg); }
  75% { transform: rotate(-15deg); }
  100% { transform: rotate(0deg); }
}

.swing-animation {
  animation: swing 1s ease-in-out infinite;
}
const element = document.getElementById('swing-element');
element.classList.add('swing-animation');

// 停止动画
// element.classList.remove('swing-animation');

使用JavaScript直接操作样式

通过定时器动态修改元素的transform属性,实现摆动效果。

const element = document.getElementById('swing-element');
let angle = 0;
let direction = 1;
const speed = 2;
const maxAngle = 15;

function swing() {
  angle += speed * direction;
  if (angle > maxAngle || angle < -maxAngle) {
    direction *= -1;
  }
  element.style.transform = `rotate(${angle}deg)`;
  requestAnimationFrame(swing);
}

swing();

使用GSAP库实现高级摆动

GSAP是一个强大的动画库,可以轻松实现复杂的摆动效果。

import { gsap } from "gsap";

const element = document.getElementById('swing-element');
gsap.to(element, {
  rotation: 15,
  duration: 0.5,
  repeat: -1,
  yoyo: true,
  ease: "sine.inOut"
});

使用物理引擎模拟摆动

如果需要更真实的物理摆动效果,可以使用Matter.js等物理引擎。

js实现摆动

const Engine = Matter.Engine;
const Render = Matter.Render;
const Bodies = Matter.Bodies;
const Composite = Matter.Composite;

const engine = Engine.create();
const render = Render.create({
  element: document.body,
  engine: engine
});

const pendulum = Bodies.rectangle(400, 100, 50, 200, {
  chamfer: { radius: 10 }
});
const anchor = Bodies.rectangle(400, 10, 300, 20, { 
  isStatic: true 
});

Composite.add(engine.world, [pendulum, anchor]);
Engine.run(engine);
Render.run(render);

摆动动画的优化建议

  • 使用requestAnimationFrame代替setTimeoutsetInterval以获得更流畅的动画效果。
  • 对于简单的摆动效果,优先考虑CSS动画,性能更好且实现简单。
  • 如果需要复杂的物理效果,考虑使用专门的物理引擎库。
  • 在移动设备上,注意动画性能,避免过度使用可能导致卡顿的效果。

标签: js
分享给朋友:

相关文章

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <…

js节流实现

js节流实现

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

js实现截图

js实现截图

使用HTML2Canvas库实现截图 HTML2Canvas是一个流行的JavaScript库,可以将网页元素或整个页面转换为Canvas图像。安装方式: npm install html2canv…

vue.js实现scrollTop

vue.js实现scrollTop

Vue.js 实现 scrollTop 的方法 使用原生 JavaScript 实现 通过 window.scrollTo 或 Element.scrollTop 实现滚动到指定位置。在 Vue 中可…

vue.js实现翻转

vue.js实现翻转

Vue.js 实现翻转效果 在 Vue.js 中实现翻转效果可以通过 CSS 过渡或动画结合 Vue 的响应式特性来完成。以下是几种常见的实现方法: 使用 CSS Transition 和 Vue…