SVG Filter tag on hover

我只是一个虾纸丫 提交于 2019-12-11 02:39:45

问题


I am trying to animate an SVG which I managed to do via this filter:

<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>

my real problem comes when I am trying to trigger the animation on hover state, it seems that the animation is taking place when the page is load.

I tried by adding the filter on hover with pure css but no chance:

 .item:hover .svg-fill path{ filter:url(#green-fill); }

Also I find that can be done with Javascript but again didn't had any success.

here is the codepen example:CodePen


回答1:


you can set begin="indefinite" on your animate element, and then call the .beginElement() function on that element whenever you want to start it.

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>


来源:https://stackoverflow.com/questions/41141871/svg-filter-tag-on-hover

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!