首页贝塞尔曲线编辑器

贝塞尔曲线编辑器

在线贝塞尔曲线编辑器,支持控制点拖拽、缓动预设切换、动画预览与 CSS/JavaScript 代码生成复制。

精确数值

曲线编辑器

P1:(0.25, 0.10)
P2:(0.25, 1.00)

预设缓动函数

当前预设:Ease

动画预览

位移
缩放
旋转
R
透明度

时间对比

当前曲线
Linear
Ease
Ease In
Ease Out
Back

CSS 代码

/* CSS 动画 */
.animated-element {
  animation: slide-in 2s ease infinite;
}

@keyframes slide-in {
  0% {
    transform: translateX(-100%);
  }
  100% {
    transform: translateX(100%);
  }
}

/* 或在 transition 中使用 */
.transition-element {
  transition: transform 0.3s ease;
}

JavaScript 代码

// JavaScript 动画
const element = document.querySelector('.animated-element')
const duration = 2000

function easeBezier(t, p1x, p1y, p2x, p2y) {
  const cx = 3 * p1x
  const bx = 3 * (p2x - p1x) - cx
  const ax = 1 - cx - bx

  const cy = 3 * p1y
  const by = 3 * (p2y - p1y) - cy
  const ay = 1 - cy - by

  function sampleCurveX(x) {
    return ((ax * x + bx) * x + cx) * x
  }

  function sampleCurveY(x) {
    return ((ay * x + by) * x + cy) * x
  }

  function solveCurveX(x) {
    let t2 = x
    for (let i = 0; i < 8; i += 1) {
      const x2 = sampleCurveX(t2) - x
      if (Math.abs(x2) < 0.001) break
      const d2 = (3 * ax * t2 + 2 * bx) * t2 + cx
      if (Math.abs(d2) < 0.000001) break
      t2 -= x2 / d2
    }
    return t2
  }

  return sampleCurveY(solveCurveX(t))
}

function animate() {
  const startTime = performance.now()

  function frame(currentTime) {
    const elapsed = currentTime - startTime
    const progress = Math.min(elapsed / duration, 1)
    const easedProgress = easeBezier(progress, 0.25, 0.1, 0.25, 1)

    element.style.transform = 'translateX(' + (easedProgress * 200) + 'px)'

    if (progress < 1) {
      requestAnimationFrame(frame)
    }
  }

  requestAnimationFrame(frame)
}

animate()


说明文档

关于贝塞尔曲线编辑器

该工具用于可视化编辑 CSS cubic-bezier() 缓动函数,支持拖拽控制点、预设对比与动画预览。

核心功能

  • 图形化编辑:拖拽两枚控制点实时调整曲线。
  • 精确数值输入:可直接输入 P1/P2 的坐标值。
  • 预设库:内置常见缓动预设并支持一键套用。
  • 动画预览:在位移、缩放、旋转、透明度场景下观察效果。
  • 曲线对比:与常见 easing 同屏对比差异。

使用说明

  1. 拖拽控制点或输入坐标值。
  2. 观察曲线和预览动画变化。
  3. 与预设曲线对比并微调。
  4. 复制最终 cubic-bezier(x1,y1,x2,y2) 用于样式代码。

使用场景

  • 设计系统中的动效参数统一。
  • 前端交互动效打磨。
  • 从“感觉”到“可复用参数”的落地过程。

常见问题

为什么动画看起来不自然?

通常是控制点过于极端,建议先从接近 ease 的预设出发再微调。

可以用于 CSS 之外吗?

可以。只要目标动画引擎支持三次贝塞尔参数即可复用。