当前位置:首页 > JavaScript

js实现摇摆

2026-02-01 08:07:54JavaScript

实现摇摆动画的方法

使用CSS的transformanimation属性可以轻松实现摇摆效果。以下是一个简单的实现方式:

.swing {
  animation: swing 1s infinite alternate;
  transform-origin: center bottom;
}

@keyframes swing {
  0% { transform: rotate(-10deg); }
  100% { transform: rotate(10deg); }
}

使用JavaScript控制摇摆

如果需要通过JavaScript动态控制摇摆效果,可以结合CSS变量:

js实现摇摆

const element = document.querySelector('.swing-element');
let angle = 0;
let direction = 1;

function swing() {
  angle += direction * 2;
  if (Math.abs(angle) >= 15) direction *= -1;
  element.style.transform = `rotate(${angle}deg)`;
  requestAnimationFrame(swing);
}

swing();

物理模拟摇摆

对于更真实的物理摇摆效果,可以使用简单的谐波运动公式:

js实现摇摆

const element = document.querySelector('.physics-swing');
const amplitude = 15; // 最大摆动角度
const frequency = 0.01; // 摆动频率
let time = 0;

function physicsSwing() {
  time += 0.1;
  const angle = amplitude * Math.sin(time * frequency);
  element.style.transform = `rotate(${angle}deg)`;
  requestAnimationFrame(physicsSwing);
}

physicsSwing();

缓动函数实现

使用缓动函数可以让摇摆更自然:

function easeInOutQuad(t) {
  return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;
}

function smoothSwing() {
  const duration = 2000; // 动画持续时间(ms)
  const start = Date.now();

  function animate() {
    const elapsed = Date.now() - start;
    const progress = (elapsed % duration) / duration;
    const eased = easeInOutQuad(progress * 2 % 1);
    const angle = eased * 30 - 15;
    element.style.transform = `rotate(${angle}deg)`;
    requestAnimationFrame(animate);
  }

  animate();
}

响应鼠标交互的摇摆

实现鼠标悬停时摇摆的效果:

const hoverElement = document.querySelector('.hover-swing');
let animationId;

hoverElement.addEventListener('mouseenter', () => {
  let angle = 0;
  let speed = 0.2;

  function hoverSwing() {
    angle += speed;
    speed *= 0.98; // 阻尼系数
    hoverElement.style.transform = `rotate(${Math.sin(angle) * 10}deg)`;

    if (Math.abs(speed) > 0.01) {
      animationId = requestAnimationFrame(hoverSwing);
    }
  }

  hoverSwing();
});

hoverElement.addEventListener('mouseleave', () => {
  cancelAnimationFrame(animationId);
  hoverElement.style.transform = 'rotate(0deg)';
});

这些方法提供了从简单到复杂的摇摆动画实现方式,可以根据具体需求选择适合的方案。CSS方法最简单,JavaScript方法提供更多控制,物理模拟则能实现更真实的效果。

标签: js
分享给朋友:

相关文章

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 // 获取所有…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现驼峰

js实现驼峰

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

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <htm…