当前位置:首页 > JavaScript

js实现阻尼

2026-04-06 06:57:38JavaScript

js实现阻尼

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 实现vue

js 实现vue

实现 Vue 的核心功能 在 JavaScript 中实现 Vue 的核心功能需要模拟数据绑定、虚拟 DOM 和响应式系统。以下是一个简化版的实现思路: 响应式系统 通过 Object.define…

js实现复制功能

js实现复制功能

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

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…