jQuery.Keyframes
This library is a wrapper around Keyframes.js, a vanilla js library that allows dynamic generation of CSS keyframes with callback events and other niceness.
Overview
CSS3 introduced fancy features like transformations, translations, rotations and scaling. jQuery has a very nice built in $(selector).animate() function which allows for easy setup of these animations. However, jQuery’s animate() does not support multiple keyframes. jQuery.Keyframes helps you accomplish just that.
Requirements
<script src='http://code.jquery.com/jquery-3.3.1.slim.min.js'></script>
Installation
Include script in your document using the following line:
<script src='/path/to/jquery.keyframes[.min].js'></script>
Be sure to define and play animations only after the page has loaded using window.onload
.
Usage
Detecting CSS animation support
var supportedFlag = $.keyframe.isSupported();
Adding a new animation sequence (keyframe)
$.keyframe.define([{
name: 'trapdoor-sequence',
'0%': {'height': '70px'},
'30%': {'height': '10px'},
'60%': {'height': '30px'},
'100%': {'height': '10px'}
}]);
Adding a single frame style
$.keyframe.define({
name: 'ball-roll',
from: {
'transform': 'rotate(0deg)'
},
to: {
'transform': 'rotate(360deg)'
}
});
Adding multiple frame styles
$.keyframe.define([{
name: 'roll-clockwise',
'0%': {
'margin-left' : '0px',
'background-color' : 'red',
'transform' : 'rotate(0deg)'
},
'100%': {
'margin-left' : '600px',
'transform' : 'rotate(360deg)'
}
},{
name: 'roll-anti-clockwise',
'0%': {
'margin-left' : '0px',
'background-color' : 'red',
'transform' : 'rotate(0deg)'
},
'100%': {
'margin-left' : '600px',
'transform' : 'rotate(-360deg)'
}
}
]);
Adding styles and properties in array fashion
Gives resemblance to CSS styling definitions
var shake_start = {'transform': 'translate(0px)'};
var shake_odd1 = {'transform': 'translate(-10px, -10px)'};
var shake_even1 = {'transform': 'translate(10px, 10px)'};
var shake_odd2 = {'transform': 'translate(10px, -10px)'};
var shake_even2 = {'transform': 'translate(-10px, 10px)'};
$.keyframe.define([{
name: 'crazy',
'0%': shake_start,
'10%': shake_odd2,
'20%': shake_even1,
'30%': shake_odd2,
'40%': shake_even2,
'50%': shake_odd2,
'60%': shake_even1,
'75.3%': shake_odd1,
'80.45%': shake_even2,
'91.6%': shake_odd1
}
]);
Please note, you can add as many properties to the array as you want to
Responsive animations
$.keyframe.define([{
name: 'roll-clockwise',
media: 'screen and (max-width: 700px)',
from: {
'margin-left' : '0px'
},
to: {
'margin-left' : '600px'
}
}
]);
Playing an animation
The css3 animation methods available are better documented here: http://www.w3schools.com/css/css3_animations.asp
$(selector).playKeyframe({
name: 'trapdoor-sequence', // name of the keyframe you want to bind to the selected element
duration: '1s', // [optional, default: 0, in ms] how long you want it to last in milliseconds
timingFunction: 'linear', // [optional, default: ease] specifies the speed curve of the animation
delay: '0s', //[optional, default: 0s] how long you want to wait before the animation starts
iterationCount: 'infinite', //[optional, default:1] how many times you want the animation to repeat
direction: 'normal', //[optional, default: 'normal'] which direction you want the frames to flow
fillMode: 'forwards', //[optional, default: 'forward'] how to apply the styles outside the animation time, default value is forwards
complete: function(){} //[optional] Function fired after the animation is complete. If repeat is infinite, the function will be fired every time the animation is restarted.
});
Playing an animation (shorthand)
$(selector).playKeyframe(
'trapdoor-sequence 1s linear 0s infinite normal forwards',
complete
);
Playing multiple animations
$(selector).playKeyframe([
'trapdoor-sequence 1s linear 0s infinite',
{
name: 'ball-roll',
duration: "3s",
timingFunction: 'ease',
iterationCount: 1
}
], complete);
Reset the animation
$(selector).resetKeyframe(callback);
Freeze keyframe animation and kill callbacks
$(selector).pauseKeyframe();
Resume keyframe animation
$(selector).resumeKeyframe();
Who is using jQuery.Keyframes?
- Hipster Gallery: http://labs.bebensiganteng.com/html5/hipstergallery/#thumbnails/0
- Ronneby Wordpress Theme: https://themeforest.net/item/ronneby-highperformance-wordpress-theme/11776839?s_rank=1
- Brooklyn Wordpress Theme: https://themeforest.net/item/brooklyn-responsive-multipurpose-wordpress-theme/6221179
- Contrive Wordpress Theme: https://themeforest.net/item/contrive-building-construction-html5-template/14535825
- DFD-Native Wordpress Theme: https://themeforest.net/item/native-powerful-startup-development-tool/19200310
- Sunday Wordpress Theme: http://themes.dfd.name/sunday/promo/
Plugins!
See other plugins that allow for spritesheets & more complex movement paths: https://github.com/Keyframes
- Keyframes.Pathfinder: A plugin for jQuery.Keyframes that generates complex movement paths
- Keyframes.Spritesheet: Keyframes.Spritesheet easily generates css3 keyframes for elements using animated spritesheets.
Changelog
1.0.0
- Moved to use keyframes.js as a base 0.1.0
- Remove all vendor prefix functionality (if you need this stick with 0.0.9)
- Remove debug output
- Source code now in ES6
- Remove advanced example
- Add jQuery 3.x to example
- Add linting 0.0.9
- Add debug output