当前位置:首页 > JavaScript

js easing实现

2026-03-15 04:31:51JavaScript

缓动函数实现原理

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

基础缓动函数示例

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

线性缓动(无变化)

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;
}

弹性缓动(带回弹效果)

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()实现分帧动画效果:

    js easing实现

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

性能优化建议

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

标签: jseasing
分享给朋友:

相关文章

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…

节流js实现

节流js实现

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

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 const…

js实现下拉菜单

js实现下拉菜单

使用HTML和CSS创建基础结构 HTML部分需要包含一个触发下拉的按钮和隐藏的下拉菜单内容: <div class="dropdown"> <button class="dr…