当前位置:首页 > JavaScript

js easing实现

2026-03-15 04:31:51JavaScript

缓动函数实现原理

缓动函数(Easing Functions)通过修改动画的进度比例(t,范围0-1),实现非匀速运动效果。核心是数学公式对t的变换,常见类型包括线性、二次、弹性等。

基础缓动函数示例

以下为JavaScript实现的经典缓动函数,输入输出均为0-1范围内的值:

线性缓动(无变化)

js easing实现

function linear(t) {
  return t;
}

二次缓动(加速/减速)

function easeInQuad(t) {
  return t * t;
}

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

function easeInOutQuad(t) {
  return t < 0.5 ? 2 * t * t : 1 - Math.pow(-2 * t + 2, 2) / 2;
}

弹性缓动(带回弹效果)

js easing实现

function easeOutElastic(t) {
  const c4 = (2 * Math.PI) / 3;
  return t === 0 ? 0 : 
         t === 1 ? 1 : 
         Math.pow(2, -10 * t) * Math.sin((t * 10 - 0.75) * c4) + 1;
}

应用缓动函数到动画

通过缓动函数修改动画的progress值,再应用于实际属性变化:

function animate(element, duration, easingFn, property, start, end) {
  let startTime = null;

  function step(timestamp) {
    if (!startTime) startTime = timestamp;
    const elapsed = timestamp - startTime;
    const progress = Math.min(elapsed / duration, 1);
    const easedProgress = easingFn(progress); // 应用缓动

    const currentValue = start + (end - start) * easedProgress;
    element.style[property] = `${currentValue}px`;

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

  requestAnimationFrame(step);
}

// 示例:使用二次缓动移动元素
const box = document.getElementById('box');
animate(box, 1000, easeInOutQuad, 'left', 0, 200);

扩展缓动类型

  1. 三次贝塞尔曲线
    通过cubic-bezier()生成自定义缓动曲线,CSS原生支持:

    transition: all 0.5s cubic-bezier(0.68, -0.6, 0.32, 1.6);
  2. 阶跃函数
    使用steps()实现分帧动画效果:

    function easeSteps(t, steps) {
      return Math.floor(t * steps) / steps;
    }

性能优化建议

  • 优先使用CSS缓动(如transition-timing-function),性能优于JavaScript。
  • 复杂动画考虑使用GSAP等库,内置优化过的缓动函数。

标签: jseasing
分享给朋友:

相关文章

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含inpu…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似: func…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…