当前位置:首页 > 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 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现tab选项卡切换

js实现tab选项卡切换

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

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…