当前位置:首页 > JavaScript

js实现减速

2026-03-14 09:50:57JavaScript

JavaScript 实现减速效果

在 JavaScript 中实现减速效果通常用于动画、游戏或滚动行为中,使运动逐渐变慢直至停止。以下是几种常见实现方法:

缓动函数(Easing Function)

使用缓动函数中的 ease-out 效果可实现减速。例如:

js实现减速

function easeOutQuad(t) {
  return t * (2 - t);
}

let startTime;
function animate(currentTime) {
  if (!startTime) startTime = currentTime;
  const elapsed = currentTime - startTime;
  const duration = 1000; // 动画持续时间(毫秒)
  const progress = Math.min(elapsed / duration, 1);
  const easedProgress = easeOutQuad(progress);

  // 应用缓动值(例如移动元素)
  element.style.transform = `translateX(${easedProgress * 100}px)`;

  if (progress < 1) {
    requestAnimationFrame(animate);
  }
}
requestAnimationFrame(animate);

物理减速(摩擦力模型)

通过模拟摩擦力逐步减少速度:

js实现减速

let speed = 10; // 初始速度
const friction = 0.95; // 摩擦系数(0~1)

function slowDown() {
  speed *= friction;
  if (Math.abs(speed) < 0.1) speed = 0; // 停止阈值

  // 应用速度(例如移动元素)
  element.style.left = `${parseFloat(element.style.left) + speed}px`;

  if (speed !== 0) {
    requestAnimationFrame(slowDown);
  }
}
slowDown();

CSS + JavaScript 结合

通过 CSS Transition 的 ease-out 曲线实现减速,JavaScript 触发变化:

element.style.transition = "transform 1s ease-out";
element.style.transform = "translateX(100px)";

滚动减速效果

为页面滚动添加减速行为:

let targetScroll = 500;
let currentScroll = window.scrollY;
const decelerateScroll = () => {
  currentScroll += (targetScroll - currentScroll) * 0.1;
  window.scrollTo(0, currentScroll);

  if (Math.abs(targetScroll - currentScroll) > 1) {
    requestAnimationFrame(decelerateScroll);
  }
};
decelerateScroll();

注意事项

  • 性能优化:优先使用 requestAnimationFrame 而非 setInterval
  • 停止条件:需设置速度或距离的阈值以避免无限计算。
  • CSS 硬件加速:对 DOM 操作使用 transform 比直接修改 left/top 更高效。

根据具体场景选择合适的方法,缓动函数适合动画,物理模型适合交互控制。

标签: js
分享给朋友:

相关文章

js实现倒计时

js实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时功能可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是几种常见的实现方式: 使用 setInterva…

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获取 jQ…