One way to do this is to use the CSS transition (*) but you need to do fill:transparentinstead fill:none, like below (1) :
JS Fiddle 1
$(function() {
$('svg').hover(function() {
$('svg').find('.social-circle').stop()
.animate({'stroke-dashoffset': 0}, 1000)
.css({'fill': 'red', 'transition': 'fill 1s'});
console.log('on');
}, function() {
$('svg').find('.social-circle').stop()
.animate({'stroke-dashoffset': 900}, 1000)
.css({'fill': 'transparent', 'transition': 'fill 1s'});
});
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<svg height="100" width="100">
<circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="orange" class="social-circle" />
</svg>
Run codeHide result
You can also use a callback function that provides a function .animate()
.animate( properties [, duration ] [, easing ] [, complete ] )
"complete - , ", , CSS transition :
JS Fiddle 2
$(function() {
$('svg').hover(function() {
$('svg').find('.social-circle').stop()
.animate({'stroke-dashoffset': 0}, 1000, animateFill('red'))
console.log('on');
}, function() {
$('svg').find('.social-circle').stop()
.animate({'stroke-dashoffset': 900}, 1000, animateFill('transparent'))
});
function animateFill(theColor) {
$('svg').find('.social-circle').css({'fill': theColor, 'transition': 'fill 1s'});
}
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<svg height="100" width="100">
<circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="orange" class="social-circle" />
</svg>
Hide result
Snap.svg, IE9 +, CSS IE10 , animate() (*) animFill('transparent') animFill('none') , . fill, fill-opacity (2) , . :
JS Fiddle 3
$(function() {
$('svg').hover(function() {
$('svg').find('.social-circle').stop()
.animate({'stroke-dashoffset': 0}, 1000, animFill('red', 1));
console.log('on');
}, function() {
$('svg').find('.social-circle').stop()
.animate({'stroke-dashoffset': 900}, 1000, animFill('red', 0))
});
});
function animFill(theColor, theOpacity) {
Snap('svg').select('.social-circle')
.animate({'fill': theColor,'fill-opacity': theOpacity}, 1000);
}
<script src="//cdnjs.cloudflare.com/ajax/libs/snap.svg/0.4.1/snap.svg-min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<svg height="100" width="100">
<circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="orange" class="social-circle" id="social" />
</svg>
Hide result----------------------------------------------- ---------------------------------
(*) CSS Snap.svg easing , jQuery. CSS :
transition: fill 1s ease-out
Snap.svg mina(), :
element.animate({'fill':theColor, 'fill-opacity':theOpacity}, 1000, mina.easeout);
(1) .
(2) fill-opacity, fill, opacity, fill stroke, stroke-opacity .