如何实现字母的混乱运动,在终点线上加起来一个单词。
在过程开始时,整个单词都在屏幕上。然后它分解成开始混乱移动的字母,然后这些字母加起来又变成一个单词。
使用 Javascript,这很容易做到——这样的脚本已经存在。
JS是否可以实施与手段相同的原则HTML,CSS或者SVG?
一个决定立刻浮现在脑海。借助工具,HTML您可以将单词分成单个字母:
<span id="s">S</span>
<span id="t">t</span>
<span id="а">a</span>
<span id="с">с</span>
<span id="k">k</span>
然后使用css-animation,以某种方式为它们设置动画。为了提供真实感,您必须规定每个字母的移动到几个不同的位置。
但这将是代码表。
有没有不使用 Javascript 的更有效的解决方案?
Вариант с переменными — так можно обойтись одним описанием анимации и затем только менять коэффициенты для каждой из букв.
CSS 选项
SVG 解决方案
svg 有一个 HTML 的类似物
<span>, -<tspan dx="x" dy="y">S</tspan>它更实用,但如果你按照问题中提出的解决方案,那么也会有很多代码。有一个更有效的解决方案,但要理解它,您可能需要从简单到复杂。
整字运动动画
用于在屏幕上显示单词的 SVG 命令:
<text x="100" y="500" font-size="90">Stackoverflow<text>其中
x和y是单词第一个字符的坐标。要动画单词的移动,您需要以某种方式动态更改或读取这些坐标。但是 SVG 中没有变量,尤其是数组,如
JS但是有机会在一个团队中组织他们的相似之处
<animate>用分号分隔的数字表示沿轴的几个位置
Х,它们将依次占据单词。为坐标编写了类似的命令
Y。下面是移动整个单词的完整代码:
将单词分解为单个字母
SVG为此提供了一个非常强大的工具。它隐藏在 command
<animate>中,因为每个字符都是一个向量对象,它有自己的坐标,使用它可以将单词分解为单个字母。如果我们继续类比
JS,那么它就像一个二维数组,其中每一列是字符的这一列对应的移动的可变值。1поз. |200 233 266 299 332 365 400 431 464 497 530 563 596; 2поз. |100 600 200 365 700 465 465 563 530 398 431 850 900; 3поз. |200 500 900 950 150 531 300 620 150 266 365 650 900; 4поз. |332 233 820 300 800 633 200 670 300 850 800 530 266; 5поз. |464 900 900 900 820 670 430 900 530 600 233 365 100; 6поз. |332 100 100 100 500 100 800 563 900 700 900 100 100; 7поз. |200 233 266 299 332 365 400 431 464 497 530 563 596换句话说:第一列第一行是
x=200移动的第一个位置的坐标,单词的第一个字符是“S”然后字符"S"移动到第二个位置x=100,以此类推。在返回到поз.7第二列中第二个字符“t”的原始位置之前,从第一个位置开始移动,
x="233"到第二个位置x="600"动画期间,读取第一行,所有字符按照坐标排列为他们指定。
接下来,读取第二行,彼此独立的字符取而代之。每行必须用分号与另一行隔开。最后一行没有分号。
以此类推,编译一模一样的表来设置坐标
Y。这两个命令
<animate>旨在更改坐标X并Y同时开始工作,从而确保每个字母在运动的每个位置同时更改坐标。下面是模仿字母混乱运动的动画代码:
事实证明,对于这种类型的动画来说,它是一个非常强大的工具。你可以玩转它,改变速度,开始时间,添加事件让动画交互,改变动画的持续时间,可以达到字母“水平”和“垂直停放”的效果。动画。
您可以用另一个替换动画文本。如果它比原来的短,它的工作原理完全一样。如果超过 13 个字符,则多余的字符将粘在第 13 个字符上,并与它一起移动。
以下是示例:
水平停车字母
效果是通过两个动画的执行时间不同来实现的。水平动画 1 秒。持续更久。
垂直停车字母
我们替换其他字母:
Пример с использованием GSAP и псевдо-рандомайзом. Все параметры, начиная от скорости каждого шага и до временной функции настраиваемые, очень удобная штука.
Вариант с использованием препроцессора SCSS
SCSS- 85 строк кодаCSS- 430 строкposition transform translateposition transform rotatecolor lettersCodepen
Скомпилированный вариант на css (т.к здесь нет поддержки scss)