马黑PHP整站系统

svg文本描边动画

位置: 首页 > 前端三套件[ 发布时间: 2024.9.25  作者: 马黑  阅读: 70 ]

一、需要用到的核心属性

(一)stroke-dasharray :描边线段数值列表,单值表示线段长度和线段间的间隔距离一样,双值时第一个数指线段长度第二个数指间隔距离,三值时,比如a b c,线段长度a、间隔距离b、线段长度c接着间隔距离a、线段长度b、间隔距离c然后从头再来,其他多值列表时,偶数值参考双值变化、奇数值参考三值变化,原理是按“线段·间隔·线段·间隔···”方式循环取数值列表值,值用完从头再循环数值。双值以上用空格或逗号隔开各值。

(二)stroke-dashoffset :描边线段偏移,表示线段与路径起点的偏移距离,支持几乎所有的svg内部可视元素。属性值为数值,正数表示正向偏移,负数表示反向偏移。

上述两个属性,第一个用来设置虚线,第二个用来设置虚线偏移。我们经常使用的CSS相抵路径运动来源于此,主要利用第二个属性加offset-path实现。svg文本标签没有path可用,所以需要第一个属性 stroke-dasharray 来描述描边形态,再用第二个属性 stroke-dashoffset 驱动描边偏移产生描边动画。

二、纯svg方式文本描边动画的实现

以下是效果和代码,后边略做解释:

<svg width="500" height="120" viewBox="-125 -30 250 60">
	<text x="0" y="18" fill="none" stroke="teal" stroke-width="2" stroke-dasharray="60 10" font-size="50" font-weight="bold" text-anchor="middle">
		花潮论坛
		<animate attributeName="stroke-dashoffset" from="-70" to="0" dur="2s" begin="0s" repeatCount="indefinite"/>
	</text>
</svg>

首先注意svg的宽高和viewBox属性设置的关系:它们按照2:1的方式设计+坐标系右下位移便于定位,需要说明的是,我们是在viewBox中作画,所以30的字体大小会放大一倍,其他数值很多依此类推。其次是动画的核心内容:text标签做了常规属性设置,其中的stroke-dasharray="60 10"设置的是文本描边的线段样式;animate 标签中的 stroke-dashoffset 偏移范围从(from)-70 到(to)0 之间循环往复变化,from 的值应设置得当,动画的头尾衔接才相对正常。

三、使用CSS实现svg文本描边动画

CSS对svg的支持度很高,试看下面使用CSS实现上例效果的演示:

<style>
.text {
	fill: none;
	stroke: teal;
	stroke-width: 2;
	stroke-dasharray: 60 10;
	font-size: 50px;
	font-weight: bold;
	text-anchor: middle;
	animation: textstroke 2s linear infinite;
}
@keyframes textstroke {
	from { stroke-dashoffset: -70; }
	to { stroke-dashoffset: 0; }
}
</style>

<svg width="500" height="120" viewBox="-125 -30 250 60">
	<text class="text" x="0" y="18">花潮论坛</text>
</svg>

这里,CSS设计了一个 .text 选择器,它将svg的text标签里的属性除了x、y之外都设置了,并加上一个animation属性调用 @keyframes 设计的名为 textstroke 的CSS动画。CSS动画也是通过 fromto 描述 stroke-dashoffset 的数值变化;CSS还可以使用百分比描述动画过程不同阶段的数值变化,功能等同于svg的 values 属性。

svg动画和CSS动画到底用哪一个好?由于CSS天然启用设备的GPU进行加速,动画的执行性能更为卓越,一般的建议是,对复杂动画而言,能用CSS实现的动画就尽量使用CSS动画,实在不行的就用svg动画;简单动画则无需考虑什么,哪个更上手就用哪一个。

前一篇: Humanity
下一篇: svg文本对齐演示

发表评论:

       

评论列表 [3条]

#3 | 飞飞 于 2024-9-25 20:12 发布: 神了,效果这么复杂,而SVG代码只有这么一丢丢。两种都好,写出来的字颜值都挺高。。

#2 | 小希 于 2024-9-25 20:04 发布: 蚂蚁线文字,似乎是见过也用过,但肯定跟之前的方法不一样。。瞧瞧SVG方法咋画的

#1 | 悄然 于 2024-9-25 14:14 发布: 这个是真漂亮,手机中,电脑时细看~

Copyright © 2023 All Right Reserved 马黑PHP文章管理整站系统v1.8
联系我们: gxblk@163.com