我正在尝试通过此过滤器设置SVG的动画:
<defs>
<filter id="green-fill" x="0%" y="0%">
<feFlood flood-color="#fff"/>
<feOffset dx="85">
<animate attributeName="dx" from="0" to="85" dur="5s"/>
</feOffset>
<feComposite operator="in" in2="SourceGraphic"/>
<feComposite operator="over" in2="SourceGraphic"/>
</filter>
</defs>
当我试图在悬停状态下触发动画时,我真正的问题出现了, 似乎在页面加载时动画正在进行。
我尝试在悬停时使用纯css添加过滤器,但没有机会:
.item:hover .svg-fill path{ filter:url(#green-fill); }
此外,我发现可以使用Javascript完成,但又没有取得任何成功。
这是codepen示例:CodePen
答案 0 :(得分:3)
您可以在animate元素上设置begin="indefinite"
,然后在想要启动它时调用该元素上的.beginElement()函数。
function startAnimation() {
anim.beginElement()
}
path {
filter: url(#green-fill);
}
<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 25.54" width="100px" height="100px">
<defs>
<filter id="green-fill" x="0%" y="0%">
<feFlood flood-color="#fff" />
<feOffset dx="0">
<animate id="anim" attributeName="dx" from="0" to="85" dur="5s" begin="indefinite" />
</feOffset>
<feComposite operator="in" in2="SourceGraphic" />
<feComposite operator="over" in2="SourceGraphic" />
</filter>
</defs>
<path fill="#ea0097" d="M12.41,4.67a8,8,0,0,0-7.89,8.18A8,8,0,0,0,12.41,21a7.64,7.64,0,0,0,5-1.83l6.22-6.34L17.39,6.5a7.73,7.73,0,0,0-5-1.83m0,20.95A12.61,12.61,0,0,1,0,12.85,12.61,12.61,0,0,1,12.41.07a12.21,12.21,0,0,1,8,3l0.14,0.13L30,12.85l-9.62,9.79a12.23,12.23,0,0,1-8,3"
/>
</svg>
<button onclick="startAnimation()">start Animation</button>