当前位置:首页 > JavaScript

js实现阻尼

2026-04-06 06:57:38JavaScript

阻尼效果的实现方法

阻尼效果常用于模拟物理运动中的阻力,使动画或交互更自然。以下是几种常见实现方式:

js实现阻尼

使用缓动函数

function damp(current, target, dampingFactor) {
  return current + (target - current) * dampingFactor;
}

// 使用示例
let position = 0;
const target = 100;
const damping = 0.1;

function update() {
  position = damp(position, target, damping);
  requestAnimationFrame(update);
}

基于速度的阻尼

let position = 0;
let velocity = 0;
const target = 100;
const damping = 0.1;
const stiffness = 0.2;

function update() {
  const distance = target - position;
  const acceleration = distance * stiffness - velocity * damping;
  velocity += acceleration;
  position += velocity;
  requestAnimationFrame(update);
}

使用时间衰减

function dampOverTime(value, target, damping, deltaTime) {
  return value + (target - value) * (1 - Math.exp(-damping * deltaTime));
}

实际应用案例(滚动阻尼)

let scrollPosition = 0;
let targetScroll = 0;
let velocity = 0;
const damping = 0.3;
const stiffness = 0.5;

window.addEventListener('wheel', (e) => {
  targetScroll += e.deltaY;
  e.preventDefault();
});

function animate() {
  const distance = targetScroll - scrollPosition;
  const acceleration = distance * stiffness - velocity * damping;
  velocity += acceleration;
  scrollPosition += velocity;

  window.scrollTo(0, scrollPosition);
  requestAnimationFrame(animate);
}

animate();

参数调节建议

  • 阻尼系数通常在0.1-0.3之间
  • 刚度系数通常在0.2-0.5之间
  • 时间步长应使用requestAnimationFrame的deltaTime

这些实现可以根据具体需求进行调整,阻尼效果的质量取决于参数的精细调节。

标签: 阻尼js
分享给朋友:

相关文章

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: functio…

js实现 拖动

js实现 拖动

实现拖动的步骤 HTML 结构 创建一个可拖动的元素和一个放置区域: <div id="draggable" draggable="true">拖动我</div> <d…

js实现刷新

js实现刷新

刷新当前页面 使用 location.reload() 方法可以强制刷新当前页面。该方法接受一个布尔参数,默认为 false,表示从缓存中加载页面;设为 true 时强制从服务器重新加载。 // 从…

vue js 实现排序

vue js 实现排序

Vue.js 实现排序的方法 在 Vue.js 中实现排序可以通过多种方式完成,包括使用计算属性、方法或直接操作数据。以下是几种常见的实现方式: 使用计算属性排序 计算属性可以自动响应数据变化并重新…