我有一个包含多个路径的SVG,我试图为其填充动画。我的目标是制作一个动画,从底部到顶部慢慢填充颜色,每条路径都有不同的颜色。
我尝试过使用lineargradient,但无法弄清楚如何将它与路径一起使用。
我创建了以下SVG:
https://jsfiddle.net/812x1tqu/
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<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"
viewBox="0 0 148 148" style="enable-background:new 0 0 148 148;" xml:space="preserve">
<style type="text/css">
.st0{fill:#0000FF;stroke:#000000;stroke-miterlimit:10;}
.st1{fill:#FF00FF;stroke:#000000;stroke-miterlimit:10;}
</style>
<g id="XMLID_1_">
<path id="XMLID_4_" class="st0" d="M147.4,71.3L0.8,67.3c-0.2,2.2-0.3,4.4-0.3,6.7c0,40.6,32.9,73.5,73.5,73.5s73.5-32.9,73.5-73.5
C147.5,73.1,147.5,72.2,147.4,71.3z"/>
<path id="XMLID_3_" class="st1" d="M74,0.5C35.7,0.5,4.2,29.8,0.8,67.3l146.6,4.1C146.1,32,113.7,0.5,74,0.5z"/>
</g>
</svg>
所以蓝色会慢慢从底部到顶部填充,然后粉红色也会从下到上开始。
**编辑:我发现了以下示例 - 但如上所述,我有路径,所以如果可能的话需要解决这个问题
https://jsfiddle.net/ppy2ggpL/
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" width="200" height="200">
<linearGradient id="lg" x1="0.5" y1="1" x2="0.5" y2="0">
<stop offset="0%" stop-opacity="1" stop-color="royalblue"/>
<stop offset="40%" stop-opacity="1" stop-color="royalblue">
<animate attributeName="offset" values="0;1;0" repeatCount="indefinite" dur="10s" begin="0s"/>
</stop>
<stop offset="40%" stop-opacity="0" stop-color="royalblue">
<animate attributeName="offset" values="0;1;0" repeatCount="indefinite" dur="10s" begin="0s"/>
</stop>
<stop offset="100%" stop-opacity="0" stop-color="royalblue"/>
</linearGradient>
<circle cx="50" cy="50" r="45" fill="url(#lg)" stroke="crimson" stroke-width="5"/>
</svg>
谢谢。
答案 0 :(得分:1)
对于那些感兴趣的人,我找到了解决方案(不确定这是否是最干净的方式,但从来没有这样做过。)
https://jsfiddle.net/812x1tqu/1/
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<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"
viewBox="0 0 148 148" style="enable-background:new 0 0 148 148;" xml:space="preserve">
<style type="text/css">
.st0{stroke:#000;stroke-miterlimit:10;}
.st1{stroke:#000;stroke-miterlimit:10;}
</style>
<linearGradient id="blue-fill" x1="0.5" y1="1" x2="0.5" y2="0">
<stop offset="100%" stop-opacity="1" stop-color="blue">
<animate attributeName="offset" values="0;1" repeatCount="1" dur="3s" begin="0s"/>
</stop>
<stop offset="100%" stop-opacity="0" stop-color="blue">
<animate attributeName="offset" values="0;1" repeatCount="1" dur="3s" begin="0s"/>
</stop>
</linearGradient>
<linearGradient id="pink-fill" x1="0.5" y1="1" x2="0.5" y2="0">
<stop offset="0%" stop-opacity="0" stop-color="pink">
<animate attributeName="offset" values="0;1" repeatCount="1" dur="3s" begin="3s" fill="freeze"/>
<animate attributeName="stop-opacity" values="0;1" repeatCount="1" dur="0.1s" begin="3s" fill="freeze"/>
</stop>
<stop offset="100%" stop-opacity="0" stop-color="pink">
<animate attributeName="offset" values="0;1" repeatCount="1" dur="3s" begin="3s" fill="freeze" />
<animate attributeName="stop-opacity" values="0;1" repeatCount="1" dur="3s" begin="6s" fill="freeze"/>
</stop>
</linearGradient>
<g id="XMLID_1_">
<path fill="url(#blue-fill)" id="XMLID_4_" class="st0" d="M147.4,71.3L0.8,67.3c-0.2,2.2-0.3,4.4-0.3,6.7c0,40.6,32.9,73.5,73 .5,73.5s73.5-32.9,73.5-73.5
C147.5,73.1,147.5,72.2,147.4,71.3z"/>
<path fill="url(#pink-fill)" id="XMLID_3_" class="st1" d="M74,0.5C35.7,0.5,4.2,29.8,0.8,67.3l146.6,4.1C146.1,32,113.7,0.5,74,0.5z"/>
</g>
</svg>
**注意:SVG路径有点混乱(我不想清理它)但动画代码无论如何都是一样的。