当前位置: 首页 > 知识库问答 >
问题:

SVG笔画动画增加长度

冯星阑
2023-03-14

笔:https://codepen.io/anon/pen/zezppk(在Chrome中可视化)

想法:动画一个SVG笔画,使它以长度0(一个等于路径总长度的dashOffset)开头,所以没有呈现任何内容。然后,逐步减小Dashoff集,直到显示出整个SVG笔画。到目前为止,没有问题,这是一个相当普遍的效果,事实上。但我想额外加点:笔画的“起点”也必须逐渐抵消,才能达到笔下的效果。

具体要求是笔画可以两次通过起点,并且笔画长度在第二次通过起点时达到100%,就像笔画中的笔画一样(不是用预射线)。

我实现的方式:写下来相当复杂。你可以探索钢笔,亲眼看看我做了什么。为了更好地理解,您可以将ID为layer_3的SVG的笔划颜色编辑为不同于白色和黑色的颜色,以便可视化动画是如何触发的。不过,我还是试着解释一下:

我复制了原始SVG并在HTML文件中粘贴了两次,因此文档中有3个SVG,每一个都在另一个上面。中间的一个,有一个白色的笔画,另外两个有一个黑色的笔画。第二个SVG(中间的一个)的动画持续时间是第一个SVG的两倍。然后,第三个SVG动画的持续时间与第一个相同,但是它具有与第一个动画完成时间相同长度的动画延迟。

这是一个非常无效的解决方案,但它很好地说明了我要实现的目标。

问题是:有没有办法达到这样的效果?使行程随着行程的增大而在路径上移动,直到行程达到完整的路径长度?

不过,我可能会沿着dashOffset动画使用TweenMax(GSAP)尝试将SVG路径从单个锚点逐渐变形为完全构造的路径,并使dashOffset动画从减.getTotallength()开始,直到0。但是变形效果并不是真正需要的,更像是一个切片函数,它接受一个锚点,并添加更多锚点(跟随路径数据),直到路径变成一个封闭形状。但是,我再一次没有找到关于这种影响的资料。

也许我正面临SVG的限制。但是,如果谁有一个想法或知道一个网站,在那里描述了这种效果,请让我知道。

共有1个答案

百里疏珂
2023-03-14

只需要一个SVG就可以完成。IMO,最简单的方法可能是忘记破折号偏移量和动画破折号数组。

由于动画的一部分,您需要一个

gap - stroke - gap

您需要使用一个有四个值的dasharray(笔画间隙笔画间隙)。

.path1 {
  stroke-dasharray: 0;
  animation: dash 5s linear;
}
/* 821.6 */

@keyframes dash {
  0% {
    stroke-dasharray: 0 0 0 822;
  }
  25% {
    stroke-dasharray: 0 205.5 205.5 822;
  }
  50% {
    stroke-dasharray: 0 411 411 822;
  }
  75% {
    stroke-dasharray: 411 205.5 822 822;
  }
  100% {
    stroke-dasharray: 822 0 822 822;
  }
}
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="340px" height="333px" viewBox="0 0 340 333" enable-background="new 0 0 340 333" xml:space="preserve">

  <path class="path1" fill="#FFFFFF" stroke="#000000" stroke-width="4" stroke-miterlimit="10" d="M66.039,133.545c0,0-21-57,18-67s49-4,65,8
	s30,41,53,27s66,4,58,32s-5,44,18,57s22,46,0,45s-54-40-68-16s-40,88-83,48s11-61-11-80s-79-7-70-41
	C46.039,146.545,53.039,128.545,66.039,133.545z"/> 
  
</svg>
 类似资料:
  • 到目前为止,我在codepen https://codepen.io/phfilly/pen/gxbmmo?editors=1100上有这个信息 从我的发现和研究来看,这似乎只能通过使用剪辑路径来实现,或者有更简单的方法吗?如果是这样的话,我不确定使用什么属性作为clipPath。 任何帮助或指导将非常感谢。

  • 使用后记多年,我现在正在学习SVG。PS有一个功能是我迄今为止无法复制的:零宽度线。在 PS 中,宽度为零的行始终可见:PostScript 将零行宽转换为最小的可打印宽度。在屏幕上,当缩放时,它们永远不会有任何思考,但无论比例如何,它们都可见。当我想渲染非常细的线条时,我已经使用了它们,而不会担心我将要使用的最终分辨率,事实证明它们非常有用。 然而,在官方SVG文档(https://www.w3

  • 我有一个箭头头的路径,我想做一个颜色过渡动画,从左到右。 我已经为线和箭头做了这件事,但它似乎不是同步的。我希望线和箭头都过渡颜色无缝。 CSS

  • 关于画笔 画笔可使路径的外观具有不同的风格。您可以将画笔描边应用于现有的路径,也可以使用 “画笔 ”工具,在绘制路径的同时应用画笔描边。 Illustrator 中有 4 种画笔 -书法画笔、散布画笔、艺术画笔和图案画笔。使用这些画笔可以达到下列效果:书法画笔创建的描边类似于使用书法钢笔带拐角的尖绘制的描边以及沿路径中心绘制的描边。在使用 “斑点画笔 ”工具时,可以使用书法画笔进行上色并自动扩展画

  • 问题内容: 我想动画一个随时间增长的图形。 这是我到目前为止所拥有的: 但是,我收到以下错误消息: 我想要的是一个动画,您可以在其中看到图形的增长。我可以在每个阶段保存图形,也许可以在matplotlib之外创建动画,但是有什么办法可以使它像这样工作吗? 问题答案: 经过审查,该代码与该问题的相关性不如我想象的那样。但是,我能够使用该SO答案和该SO答案为您拼凑出一个答案。以下代码将创建一个图,向

  • brush 画笔