javascript - SVG filter won't disappear on hover using transitions -
i working on new stuff , have been introduced world of svg objects. nice. anyways, have button have built , put filter on it. designer i'm working filter (a drop shadow) go opacity 1 0 on hover, , return 1 off hover.
i have tried normal transitions on filter, , can filter disappear transition far smooth.
here's code:
html
<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 216 216" style="enable-background:new 0 0 216 216;" xml:space="preserve"> <filter id="fade" height="150%" width='150%'> <femerge> <femergenode/> <!-- contains offset blurred image --> <femergenode in="sourcegraphic" /> <!-- contains element filter applied --> </femerge> </filter> <filter id="dropshadow" height="150%" width='150%'> <fegaussianblur in="sourcealpha" stddeviation="25" /> <!-- stddeviation how blur --> <feoffset dx="0" dy="15vh" result="offsetblur" /> <!-- how offset --> <fecomponenttransfer> <fefunca type="linear" slope="0.4" /> </fecomponenttransfer> <femerge> <femergenode/> <!-- contains offset blurred image --> <femergenode in="sourcegraphic" /> <!-- contains element filter applied --> </femerge> </filter> <a href='' id='playvideo_button'> <g> <path class="st0" d="m108,24c-46.4,0-84,37.6-84,84s37.6,84,84,84s84-37.6,84-84s154.4,24,108,24z" /> <polygon class="st1" points="92,140 92,76 140,108" /> </g> </a> </svg> css
svg { width: 30vw; height: 30vh; cursor: pointer; } svg .st0 { fill: #4982cf; transition: filter.6s ease-out; filter: url(#dropshadow); } svg .st1 { fill: #ffffff; } svg:hover .st0{ filter: url(#fade); } here, also, link fiddle have been playing around with, please let me know if additional resources required! thank in advance assistance.
https://jsfiddle.net/sfza69ry/7/
edits
i have created second filter, transparent overlay, has failed , same not smooth effect.
i'm pretty @ loss here.
using transitions on filter not way this. here more elegant way. there bunch of things here should note:
- you need size both svg , filter regions make sure shadow isn't cut off
- you can't transition filters
- support css units isn't reliably supported inside svg filter, stick either objectboundingbox (%) or userspaceonuse (viewbox) units
look @ how constructed filter allow drawn on top of shape (to capture hover) without obscuring it. that's "operator="out" part of filter.
enclose filter in defs element. browsers require this.
- don't use illustrator exports boilerplates. they're not constructed svg.
in general, worst way learn svg trying decode or tweak illustrator export code. it's unmitigated craptastic disaster.
svg { width: 30vw; height: 30vh; cursor: pointer; } svg .st0 { fill: #4982cf; } svg .st1 { fill: #ffffff; } #usedshadow { opacity: 1; transition: opacity 0.6s; } #usedshadow:hover { opacity: 0; transition: opacity 0.6s; } <svg version="1.1" x="0px" y="0px" width="300px" height="300px" viewbox="0 0 300 300"> <defs> <filter id="dropshadow" x="-50%" y="-50%" height="200%" width='200%'> <fegaussianblur in="sourcealpha" stddeviation="10" /> <!-- stddeviation how blur --> <feoffset dx="0" dy="15" result="offsetblur" /> <!-- how offset --> <fecomponenttransfer> <fefunca type="linear" slope="0.4" /> </fecomponenttransfer> <fecomposite operator="out" in2="sourcegraphic"/> </filter> <g id="myshape"> <path class="st0" d="m108,24c-46.4,0-84,37.6-84,84s37.6,84,84,84s84-37.6,84-84s154.4,24,108,24z" /> <polygon class="st1" points="92,140 92,76 140,108" /> <g> </defs> <use xlink:href="#myshape"/> <use id="usedshadow" filter="url(#dropshadow)" xlink:href="#myshape"/> </svg>
Comments
Post a Comment