/*!
* Revealer 2.0.0
*
* Copyright 2015, Pixel Union - http://pixelunion.net
* Released under the MIT license
*/
(function($){
// check for trend event (make sure jquery.trend is included)
if (typeof $.event.special.trend !== "object") {
console.warn("Please make sure jquery.trend is included! Otherwise revealer won't work.");
}
// Simple requestAnimationFrame polyfill
var raf = window.requestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.webkitRequestAnimationFrame ||
function(fn) { window.setTimeout(fn, 1000/60); }
// Public API
var methods = {
isVisible: function(el) {
return !!el.data("revealer-visible");
},
show: function(el, force) {
// Check state
if (methods.isVisible(el)) {
el.removeClass("animating animating-in");
el.off("revealer-animating revealer-show");
return;
}
// Remove previous event listeners
el.data("revealer-visible", true);
el.off("trend");
if (force) {
el.addClass("visible");
el.trigger("revealer-show");
return;
}
raf(function(){
// Start animation state transition
el.addClass("animating animating-in");
el.trigger("revealer-animating");
raf(function(){
el.addClass("visible");
el.one("trend", function(){
el.removeClass("animating animating-in");
el.trigger("revealer-show");
});
});
});
},
hide: function(el, force) {
// Check state
if (!methods.isVisible(el)) {
el.removeClass("animating animating-out visible");
el.off("revealer-animating revealer-hide");
return;
}
// Remove previous event listeners
el.data("revealer-visible", false);
el.off("trend");
if (force) {
el.removeClass("visible");
el.trigger("revealer-hide");
return;
}
raf(function(){
el.addClass("animating animating-out");
el.trigger("revealer-animating");
raf(function(){
el.removeClass("visible");
el.one("trend", function(){
el.removeClass("animating animating-in animating-out");
el.trigger("revealer-hide");
});
});
});
},
toggle: function(el, force) {
if (methods.isVisible(el)) {
methods.hide(el, force);
} else {
methods.show(el, force);
}
}
};
// jQuery plugin
$.fn.revealer = function(method, force) {
// Get action
var action = methods[method || "toggle"];
if (!action) return this;
// Run action
if (method === "isVisible") {
return action(this);
}
return this.each(function(){
action($(this), force);
});
};
})(jQuery);