/*!
|
* animsition v3.4.3
|
* http://blivesta.github.io/animsition/
|
* Licensed under MIT
|
* Author : blivesta
|
* http://blivesta.com/
|
*/
|
(function($) {
|
"use strict";
|
var namespace = "animsition";
|
var methods = {
|
init: function(options) {
|
options = $.extend({
|
inClass: "fade-in",
|
outClass: "fade-out",
|
inDuration: 1500,
|
outDuration: 800,
|
linkElement: ".animsition-link",
|
loading: true,
|
loadingParentElement: "body",
|
loadingClass: "animsition-loading",
|
unSupportCss: [ "animation-duration", "-webkit-animation-duration", "-o-animation-duration" ],
|
overlay: false,
|
overlayClass: "animsition-overlay-slide",
|
overlayParentElement: "body"
|
}, options);
|
var support = methods.supportCheck.call(this, options);
|
if (!support) {
|
if (!("console" in window)) {
|
window.console = {};
|
window.console.log = function(str) {
|
return str;
|
};
|
}
|
console.log("Animsition does not support this browser.");
|
return methods.destroy.call(this);
|
}
|
var overlayMode = methods.optionCheck.call(this, options);
|
if (overlayMode) {
|
methods.addOverlay.call(this, options);
|
}
|
if (options.loading) {
|
methods.addLoading.call(this, options);
|
}
|
return this.each(function() {
|
var _this = this;
|
var $this = $(this);
|
var $window = $(window);
|
var data = $this.data(namespace);
|
if (!data) {
|
options = $.extend({}, options);
|
$this.data(namespace, {
|
options: options
|
});
|
$window.on("load." + namespace + " pageshow." + namespace, function() {
|
methods.pageIn.call(_this);
|
});
|
$window.on("unload." + namespace, function() {});
|
$(options.linkElement).on("click." + namespace, function(event) {
|
event.preventDefault();
|
var $self = $(this);
|
methods.pageOut.call(_this, $self);
|
});
|
}
|
});
|
},
|
addOverlay: function(options) {
|
$(options.overlayParentElement).prepend('<div class="' + options.overlayClass + '"></div>');
|
},
|
addLoading: function(options) {
|
$(options.loadingParentElement).append('<div class="' + options.loadingClass + '"></div>');
|
},
|
removeLoading: function() {
|
var $this = $(this);
|
var options = $this.data(namespace).options;
|
var $loading = $(options.loadingParentElement).children("." + options.loadingClass);
|
$loading.fadeOut().remove();
|
},
|
supportCheck: function(options) {
|
var $this = $(this);
|
var props = options.unSupportCss;
|
var propsNum = props.length;
|
var support = false;
|
if (propsNum === 0) {
|
support = true;
|
}
|
for (var i = 0; i < propsNum; i++) {
|
if (typeof $this.css(props[i]) === "string") {
|
support = true;
|
break;
|
}
|
}
|
return support;
|
},
|
optionCheck: function(options) {
|
var $this = $(this);
|
var overlayMode;
|
if (options.overlay || $this.data("animsition-overlay")) {
|
overlayMode = true;
|
} else {
|
overlayMode = false;
|
}
|
return overlayMode;
|
},
|
animationCheck: function(data, stateClass, stateIn) {
|
var $this = $(this);
|
var options = $this.data(namespace).options;
|
var dataType = typeof data;
|
var dataDuration = !stateClass && dataType === "number";
|
var dataClass = stateClass && dataType === "string" && data.length > 0;
|
if (dataDuration || dataClass) {
|
data = data;
|
} else if (stateClass && stateIn) {
|
data = options.inClass;
|
} else if (!stateClass && stateIn) {
|
data = options.inDuration;
|
} else if (stateClass && !stateIn) {
|
data = options.outClass;
|
} else if (!stateClass && !stateIn) {
|
data = options.outDuration;
|
}
|
return data;
|
},
|
pageIn: function() {
|
var _this = this;
|
var $this = $(this);
|
var options = $this.data(namespace).options;
|
var thisInDuration = $this.data("animsition-in-duration");
|
var thisInClass = $this.data("animsition-in");
|
var inDuration = methods.animationCheck.call(_this, thisInDuration, false, true);
|
var inClass = methods.animationCheck.call(_this, thisInClass, true, true);
|
var overlayMode = methods.optionCheck.call(_this, options);
|
if (options.loading) {
|
methods.removeLoading.call(_this);
|
}
|
if (overlayMode) {
|
methods.pageInOverlay.call(_this, inClass, inDuration);
|
} else {
|
methods.pageInBasic.call(_this, inClass, inDuration);
|
}
|
},
|
pageInBasic: function(inClass, inDuration) {
|
var $this = $(this);
|
$this.css({
|
"animation-duration": inDuration / 1e3 + "s"
|
}).addClass(inClass).animateCallback(function() {
|
$this.removeClass(inClass).css({
|
opacity: 1
|
});
|
});
|
},
|
pageInOverlay: function(inClass, inDuration) {
|
var $this = $(this);
|
var options = $this.data(namespace).options;
|
$this.css({
|
opacity: 1
|
});
|
$(options.overlayParentElement).children("." + options.overlayClass).css({
|
"animation-duration": inDuration / 1e3 + "s"
|
}).addClass(inClass);
|
},
|
pageOut: function($self) {
|
var _this = this;
|
var $this = $(this);
|
var options = $this.data(namespace).options;
|
var selfOutClass = $self.data("animsition-out");
|
var thisOutClass = $this.data("animsition-out");
|
var selfOutDuration = $self.data("animsition-out-duration");
|
var thisOutDuration = $this.data("animsition-out-duration");
|
var isOutClass = selfOutClass ? selfOutClass : thisOutClass;
|
var isOutDuration = selfOutDuration ? selfOutDuration : thisOutDuration;
|
var outClass = methods.animationCheck.call(_this, isOutClass, true, false);
|
var outDuration = methods.animationCheck.call(_this, isOutDuration, false, false);
|
var overlayMode = methods.optionCheck.call(_this, options);
|
var url = $self.attr("href");
|
if (overlayMode) {
|
methods.pageOutOverlay.call(_this, outClass, outDuration, url);
|
} else {
|
methods.pageOutBasic.call(_this, outClass, outDuration, url);
|
}
|
},
|
pageOutBasic: function(outClass, outDuration, url) {
|
var $this = $(this);
|
$this.css({
|
"animation-duration": outDuration / 1e3 + "s"
|
}).addClass(outClass).animateCallback(function() {
|
location.href = url;
|
});
|
},
|
pageOutOverlay: function(outClass, outDuration, url) {
|
var _this = this;
|
var $this = $(this);
|
var options = $this.data(namespace).options;
|
var thisInClass = $this.data("animsition-in");
|
var inClass = methods.animationCheck.call(_this, thisInClass, true, true);
|
$(options.overlayParentElement).children("." + options.overlayClass).css({
|
"animation-duration": outDuration / 1e3 + "s"
|
}).removeClass(inClass).addClass(outClass).animateCallback(function() {
|
$this.css({
|
opacity: 0
|
});
|
location.href = url;
|
});
|
},
|
destroy: function() {
|
return this.each(function() {
|
var $this = $(this);
|
$(window).unbind("." + namespace);
|
$this.css({
|
opacity: 1
|
}).removeData(namespace);
|
});
|
}
|
};
|
$.fn.animateCallback = function(callback) {
|
var end = "animationend webkitAnimationEnd mozAnimationEnd oAnimationEnd MSAnimationEnd";
|
return this.each(function() {
|
$(this).bind(end, function() {
|
$(this).unbind(end);
|
return callback.call(this);
|
});
|
});
|
};
|
$.fn.animsition = function(method) {
|
if (methods[method]) {
|
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
|
} else if (typeof method === "object" || !method) {
|
return methods.init.apply(this, arguments);
|
} else {
|
$.error("Method " + method + " does not exist on jQuery." + namespace);
|
}
|
};
|
})(jQuery);
|