当前位置:首页 > JavaScript

js实现回弹

2026-03-15 10:21:06JavaScript

实现回弹效果的 JavaScript 方法

使用 CSS 动画结合 JavaScript

通过 CSS 定义关键帧动画实现回弹效果,JavaScript 用于触发动画。

@keyframes bounce {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-20px); }
}

.element {
  animation: bounce 0.5s ease infinite;
}
const element = document.querySelector('.element');
element.addEventListener('click', () => {
  element.style.animation = 'none';
  setTimeout(() => {
    element.style.animation = 'bounce 0.5s ease';
  }, 10);
});

使用 GreenSock (GSAP) 库

GSAP 提供了强大的动画控制能力,包括弹性效果。

gsap.to(".element", {
  y: -20,
  duration: 0.5,
  ease: "elastic.out(1, 0.5)",
  repeat: 1,
  yoyo: true
});

使用 requestAnimationFrame 实现自定义物理效果

通过模拟物理弹簧系统实现回弹效果。

function bounce(element, distance) {
  let start = null;
  const duration = 1000;
  const initialY = 0;

  function step(timestamp) {
    if (!start) start = timestamp;
    const progress = (timestamp - start) / duration;
    const currentDistance = distance * Math.sin(progress * Math.PI * 2) * Math.exp(-progress * 2);

    if (progress < 1) {
      element.style.transform = `translateY(${currentDistance}px)`;
      requestAnimationFrame(step);
    } else {
      element.style.transform = 'translateY(0)';
    }
  }

  requestAnimationFrame(step);
}

const box = document.getElementById('box');
box.addEventListener('click', () => bounce(box, 50));

使用 Web Animations API

现代浏览器原生支持的动画 API。

const element = document.querySelector('.element');
element.animate([
  { transform: 'translateY(0)' },
  { transform: 'translateY(-30px)' },
  { transform: 'translateY(0)' }
], {
  duration: 800,
  easing: 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',
  iterations: 1
});

使用 CSS Transition 结合 JavaScript

通过切换类名触发 CSS 过渡效果。

js实现回弹

.element {
  transition: transform 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55);
}

.element.bounce {
  transform: translateY(-20px);
}
const element = document.querySelector('.element');
element.addEventListener('click', () => {
  element.classList.add('bounce');
  setTimeout(() => {
    element.classList.remove('bounce');
  }, 300);
});

每种方法适用于不同场景,CSS 方案性能最佳但控制力较弱,GSAP 功能最丰富但需要引入库,自定义物理效果最灵活但实现复杂。根据项目需求选择合适方案。

标签: js
分享给朋友:

相关文章

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js 进度条的实现

js 进度条的实现

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

js实现复制到剪贴板

js实现复制到剪贴板

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

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。 &…