评论资讯 [ 总 265 则 ]
·悄然 - 2024-10-4 20:40
·小希 - 2024-10-3 09:54
·飞飞 - 2024-10-3 09:09
·小白 - 2024-10-3 09:00
·悄然 - 2024-10-3 08:45
·飞飞 - 2024-10-3 08:43
·小白 - 2024-10-2 15:16
·悄然 - 2024-10-2 15:12
·飞飞 - 2024-10-2 14:57
·小希 - 2024-10-1 15:36
·小希 - 2024-10-3 09:54
·飞飞 - 2024-10-3 09:09
·小白 - 2024-10-3 09:00
·悄然 - 2024-10-3 08:45
·飞飞 - 2024-10-3 08:43
·小白 - 2024-10-2 15:16
·悄然 - 2024-10-2 15:12
·飞飞 - 2024-10-2 14:57
·小希 - 2024-10-1 15:36
友情链接
网站统计
svg文本左右移动
svg实现文本左右移动非常容易:使用 animate 标签持续改变text标签的 x 属性值即可。问题在于如何确定边界:当viewBox和svg坐标及物理宽高一致(默认)则左边界是0,右边界则需要需要获知文本标签长度。svg不提供计算元素尺寸的方法,需要借助JS来获取text标签的宽度,最简单的方法是使用基于svg子元素的getBBox API,svgElement.getBBox() 将返回一个基于svg元素的矩形对象,该对象的 width 和 height 是宽高值。以下演示,JS代码中我们先获取svg标签的宽度和text标签的宽度,后者就是使用 getBBox() 方法拿到文本元素的宽度值,svg的宽度减去文本元素的宽度就是右边界;然后,设置动画标签的 values 值覆盖原先在svg代码中的设置,使之产生作用。
<svg id="mysvg" width="760" height="100" style="border: 1px solid gray"> <text id="txt" x="0" y="50%" text-anchor="start" dominant-baseline="middle" font-size="26"> Hello SVG! <animate id="xmove" attributeName="x" values="0;0;0" dur="20s" repeatCount="indefinite" /> </text> </svg> <script> let svgwidth = mysvg.clientWidth, tb = txt.getBBox(); xmove.setAttribute('values', `0;${svgwidth - tb.width};0`); </script>
以下是运行效果:
【要点】① viewBox和svg保持一致的坐标系及宽高,以保证后续的计算基于svg物理层面; ② 需要事先获得text标签尺寸,使用 getBBox() 方法可以方便拿到所需数据。
前一篇: svg文本描边动画彩色版
下一篇: css+svg动画
发表评论:
评论列表 [1条]
#1 | 悄然 于 2024-9-28 17:10 发布: 这个字体有点内雕刻效果呢。看完说明老师处理右边界的思路神奇又完美~~getBBox() 这个新词儿作用可真大。。