当前位置:首页 > JavaScript

js实现回弹

2026-04-07 03:50:29JavaScript

实现回弹效果的JavaScript方法

使用CSS动画结合JavaScript可以轻松实现回弹效果。以下是两种常见方法:

使用CSS关键帧动画

通过定义@keyframes创建回弹动画,JavaScript控制触发时机:

@keyframes bounce {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-20px); }
}
const element = document.getElementById('bounceElement');
element.addEventListener('click', () => {
  element.style.animation = 'bounce 0.5s ease';
  setTimeout(() => element.style.animation = '', 500);
});

使用JavaScript动态计算位置

通过requestAnimationFrame实现更精细的控制:

function bounce(element, height = 20, duration = 500) {
  let start = null;
  const animate = (timestamp) => {
    if (!start) start = timestamp;
    const progress = (timestamp - start) / duration;
    const y = height * Math.sin(progress * Math.PI * 2);
    element.style.transform = `translateY(${-Math.abs(y)}px)`;
    if (progress < 1) requestAnimationFrame(animate);
  };
  requestAnimationFrame(animate);
}

物理引擎实现高级回弹

对于更真实的物理效果,可以模拟弹性系数和阻尼:

function physicsBounce(element, options = {}) {
  const { stiffness = 0.1, damping = 0.8 } = options;
  let position = 0, velocity = 0, target = 0;

  function update() {
    const force = -stiffness * position;
    velocity += force;
    velocity *= damping;
    position += velocity;
    element.style.transform = `translateY(${position}px)`;
    if (Math.abs(velocity) > 0.01) requestAnimationFrame(update);
  }

  function trigger() {
    velocity = -15;
    update();
  }

  return { trigger };
}

第三方库解决方案

使用现成的动画库可以快速实现复杂效果:

  • GSAP:TweenMax.to(element, 0.5, { y: -20, ease: Bounce.easeOut })
  • Anime.js:内置弹性缓动函数
  • Popmotion:提供完整的物理动画系统

移动端优化技巧

针对触摸事件需要特别处理:

js实现回弹

let startY, isBouncing = false;
element.addEventListener('touchstart', (e) => {
  startY = e.touches[0].clientY;
});

element.addEventListener('touchmove', (e) => {
  if (isBouncing) return;
  const deltaY = e.touches[0].clientY - startY;
  if (deltaY < -10) triggerBounce();
});

标签: js
分享给朋友:

相关文章

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js实现列表

js实现列表

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

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: Int…

js分页实现

js分页实现

分页的基本原理 分页的核心是通过计算当前页码和数据偏移量,从服务器或本地数据中截取对应范围的数据进行展示。通常需要以下参数:当前页码(currentPage)、每页条数(pageSize)、总数据量(…