I am writing a jQuery plugin to animate elements via CSS3 Transitions. in jQuery there is as .stop()
that interupts the current animation on the selected element.
Any idea how i could stop a running CSS3 animation? Is there a native way to handle this or do i have to mesure the animation, and set the style of the animated element to the current position, color size or whaterver?
This is the current state of the jQuery plugin: http://jsfiddle.net/meo/r4Ppw/
I have tried to set to "-webkit-transition-duration" to 0 / none / false. but it does not stop the animation.
To pause an element's transition, use getComputedStyle and getPropertyValue at the point in the transition you want to pause it. Then set those CSS properties of that element equal to those values you just got.
Specify the Speed Curve of the Transition ease - specifies a transition effect with a slow start, then fast, then end slowly (this is default) linear - specifies a transition effect with the same speed from start to end. ease-in - specifies a transition effect with a slow start.
CSS transitions provide a way to control animation speed when changing CSS properties. Instead of having property changes take effect immediately, you can cause the changes in a property to take place over a period of time.
CSS Transitions allow property changes in CSS values to occur smoothly over a specified duration. This smoothing animates the changing of a CSS value when triggered by a mouse click, focus or active state, or any changes to the element (including even a change on the element's class attribute).
Without going too deep in your plugin, you can just re-use your css3animate
method using the current (computed) values for the props you want, and setting the duration to 0 (1 in you plugin since you use the !speed
to use the default..)
so in the example using
var $animated = $('div');
$animated.css3animate({"height": $animated.css('height'), "width": $animated.css('width')}, 1);
will do the trick.
example at http://jsfiddle.net/T5LVX/1/
Of course, you should automate this for the current properties in use. If you use a timer when you start the animation and one when someone use the stop method, you can also simulate a pause/resume functionality ..
update
You can store the cssObject
passed to the animation, to the data
of the element, and on stop loop through them to get the current values.
So in you animation
method you could $obj.data('animationCss', cssObject);
and in the stop
method
stop : function( clearQueue,jumpToEnd ){
return this.each(function(){
var $that = $(this);
var currentCss = {};
var animationCss = $that.data('animationCss');
for (var prop in animationCss)
currentCss[prop] = $that.css(prop);
if (jumpToEnd)
{
animation($that,currentCss,1, function(){animation($that,animationCss,1)});
}
else
{
animation($that,currentCss,1);
}
console.log("stop was called");
});
}
example: http://jsfiddle.net/T5LVX/6/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With