找回密码
 立即注册
搜索

明白网站前端之纯 CSS 贝塞尔曲线运动路径


除了雅之外,贝塞尔曲线还因其定义和构造而具有良好的数学特性。难怪它们被广泛应用于这么多领域:美工教程的具体问题可以到我们网站了解一下,也有业内领域专业的客服为您解答问题,为成功合作打下一个良好的开端!https://cw.tyz18.cn/



作为绘图设计工具:它们在矢量绘图软件中通常被称为路径。


作为表示曲线的格式:它们用于SVG、字体和许多其他矢量图形格式。


作为数学函数:通常用于控制动画时间。


现在,如何使用贝塞尔曲线作为CSS的运动路径



速回顾
根据上下文,当提到贝塞尔曲线时,我们通常假设是二维次贝塞尔曲线。


这样的曲线由四个点定义:


次一词表示曲线的基础函数是次多项式。还有类似的二次贝塞尔曲线,但控制点少了一个。






问题
假设给定了一条任意的2D次B曲线,您将如何使用纯CSS动画为元素设置动画,使其沿着曲线精确移动


例如,您将如何重新创建此动画











在本文中,我们将探索种不同风格的方法。对于每个解决方案,我们将展示一个交互式演示,然后解释它是如何工作的。幕后有很多数学计算和证明,但请放心,我们不会讲得很深。


开始吧!
方法一:时间扭曲
这是基本的想法:


设置@以将元素从曲线的一个端点移动到另一个端点。
分别扭曲每个坐标的时间,使用--

使用-()具有正确参数的函数,我们可以创建任何次贝塞尔曲线的运动路径:











这个演示展示了一个纯CSS动画。然而使用了和JS,它们有两个目的:

可视化底层贝塞尔曲线(红色曲线)。
允许使用典型的路径UI调整曲线。

您可以拖动两个端点(黑点)和两个控制点(黑色方块)。JS代码将通过更新一些CSS变量相应地更新动画。

这个怎么运作









假设所需的次贝塞尔曲线由四个点定义:0、1、2和3。我们设置CSS规则如下:


规则并确定元素的开始和结束位置@。在我们有两个神奇的函数中,参数的计算使得两者在任何时候都始终具有正确的值。-----()


我会跳过数学,但我在这里起草了一个简短的证明,供你好奇的数学头脑使用。
讨论
这种方法应该适用于大多数情况。您甚至可以通过为该值引入另一个动画来制作3D次贝塞尔曲线。


但是,有一些小警告:

由于被零除错误,当两个端点位于水平或垂直线上时,它不起作用。



它不支持阶数高于的贝塞尔曲线3。
动画时间选项有限。

我们使用和以上来现线性时序。
您可以调整这两个值来调整时间,但与其他方法相比它是有限的。稍后会详细介绍。




方法二:标准贝塞尔曲线构造
贝塞尔曲线的数学构造已经给了我们很好的提示。














一步一步,我们可以确定所有移动点的坐标。0首先,我们确定在和之间移动的绿点的位置1:











可以用类似的方式构建额外的绿点。


接下来,我们可以像这样确定蓝点的位置:











冲洗并重复,比较终我们会得到想要的曲线。












结论
在本文中,我们讨论了2种仅使用CSS动画沿着贝塞尔曲线精确移动元素的不同方法。


虽然所有2种方法都或多或少用,但它们各有利弊:

方法1对于熟悉计时函数的人来说可能更直观。但是它在动画时间方面不太灵活。
对于熟悉贝塞尔曲线数学构造的人来说,方法2更有意义。动画时间也很灵活。另一方面,由于使用@

就这样!我希望你觉得这篇文章很有趣。请让我知道你的想法!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册