html - SVG > 从中间开始动画宽度

标签 html css animation svg web

我有一个 SVG Logo ,我想要为其设置动画。 有一个中间部分将保持固定,但侧面的笔画实际上会扩展并绕过整个物体。我实际上想做的事情有一个例子:

<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
	<style type="text/css">
		.st0{fill:#656E76;}
	</style>
	<g>
		<rect id="rect1" class="st0" cx="50" cy="50" x="0" y="40.5" width="158.9" height="6.3"/>
		<rect id="rect2" class="st0" cx="0" cy="100" x="0" y="6.4" width="6.3" height="34.4"/>
		<rect id="rect3" class="st0" cx="0" cy="100" x="152.6" y="6.4" width="6.3" height="34.4"/>
		<rect id="rect4" class="st0" cx="0" cy="0" x="0" y="0.2" width="38.8" height="6.3"/>
		<rect id="rect5" class="st0" cx="100" cy="0" x="120.2" y="0.2" width="38.8" height="6.3"/>
		
		<animate xlink:href="#rect1" attributeName="width" from="0" to="158.9" begin="0s" dur="0.4s" />
		<animate xlink:href="#rect2" attributeName="height" from="0" to="34.4"  begin="0.4s" dur="0.25s" />
		<animate xlink:href="#rect3" attributeName="height" from="0" to="34.4" begin="0.4s" dur="0.25s" />
		<animate xlink:href="#rect4" attributeName="width" from="0" to="38.5" begin="0.65s" dur="0.25s" />
		<animate xlink:href="#rect5" attributeName="width" from="0" to="38.5" begin="0.65s" dur="0.25s" />
	</g>
</svg>

目前,动画可以正常工作,但我无法使我的对象从正确的中心扩展。例如,底线应从中间扩展,边线应从底部扩展等。

需要这方面的帮助。有人可以帮忙吗?

最佳答案

假设您不习惯使用矩形来形成形状的侧面,那么如果您将形状更改为使用描边宽度等于矩形厚度的单个路径,问题就会变得容易得多。

<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
	<g>
        <path id="shape" fill="none" stroke-width="6.3" stroke="#656E76"
              d="M 38.8 3.35 H 3.15 V 43.65 H 155.75 V 3.35 H 120.2" />
	</g>
</svg>

然后,您可以通过对线条的虚线图案进行动画处理来实现动画。假设您的路径长度为 100。我们希望以 0 长度的破折号开始,然后以 100 的破折号结束。同时,我们将破折号偏移量(破折号图案开始的位置)设置为动画,从 -50 开始(移动破折号图案)到线的中心)到 0(线的开头)。

对于我们的线路,路径长度实际上是 304.4。所以最终的动画变成:

<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
	<g>
        <path id="shape" fill="none" stroke-width="6.3" stroke="#656E76"
              d="M 38.8 3.35 H 3.15 V 43.65 H 155.75 V 3.35 H 120.2" />
		<animate xlink:href="#shape" attributeName="stroke-dasharray" from="0 304.4" to="304.4 0" begin="0s" dur="0.4s" />
		<animate xlink:href="#shape" attributeName="stroke-dashoffset" from="-152.2" to="0" begin="0s" dur="0.4s" />
	</g>
</svg>

旁白:我们也可以通过仅对破折号图案进行动画处理来实现相同的效果,但其工作原理需要更长的时间来解释:)

<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
	<g>
        <path id="shape" fill="none" stroke-width="6.3" stroke="#656E76"
              d="M 38.8 3.35 H 3.15 V 43.65 H 155.75 V 3.35 H 120.2" />
	<animate xlink:href="#shape" attributeName="stroke-dasharray" from="0 152.2 0 152.2" to="0 0 304.4 0" begin="0s" dur="0.4s" />
	</g>
</svg>

关于html - SVG > 从中间开始动画宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37622422/

相关文章:

html - 如何将 RGBA 转换为旧版 IE 浏览器的滤镜

html - 一行中的 div 标签

javascript - 需要使用 javascript 为下拉列表创建 onChange/onSelect

javascript - 使用样式组件添加两个类(事件类)

javascript - 如何使用 JavaScript/CSS 为 DOM 元素设置动画

html - 服务器获取旧版本的图像?

javascript - 如何将字符串值作为隐藏参数绑定(bind)到 <li> 标记?

css - 制作像 Product Hunt/Reddit 这样的网站的前端

swift - 我如何使用 CGAffineTransform 进行正确的拖放

javascript - 影响其他元素的 CSS Fade