401 lines
14 KiB
JavaScript
401 lines
14 KiB
JavaScript
/*! WOW - v1.1.2 - 2016-04-08
|
|
* Copyright (c) 2016 Matthieu Aussaguel;*/
|
|
(function() {
|
|
var a, b, c, d, e, f = function(a, b) {
|
|
return function() {
|
|
return a.apply(b, arguments)
|
|
}
|
|
}, g = [].indexOf || function(a) {
|
|
for (var b = 0, c = this.length; c > b; b++)
|
|
if (b in this && this[b] === a)
|
|
return b;
|
|
return -1
|
|
}
|
|
;
|
|
b = function() {
|
|
function a() {}
|
|
return a.prototype.extend = function(a, b) {
|
|
var c, d;
|
|
for (c in b)
|
|
d = b[c],
|
|
null == a[c] && (a[c] = d);
|
|
return a
|
|
}
|
|
,
|
|
a.prototype.isMobile = function(a) {
|
|
return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(a)
|
|
}
|
|
,
|
|
a.prototype.createEvent = function(a, b, c, d) {
|
|
var e;
|
|
return null == b && (b = !1),
|
|
null == c && (c = !1),
|
|
null == d && (d = null),
|
|
null != document.createEvent ? (e = document.createEvent("CustomEvent"),
|
|
e.initCustomEvent(a, b, c, d)) : null != document.createEventObject ? (e = document.createEventObject(),
|
|
e.eventType = a) : e.eventName = a,
|
|
e
|
|
}
|
|
,
|
|
a.prototype.emitEvent = function(a, b) {
|
|
return null != a.dispatchEvent ? a.dispatchEvent(b) : b in (null != a) ? a[b]() : "on" + b in (null != a) ? a["on" + b]() : void 0
|
|
}
|
|
,
|
|
a.prototype.addEvent = function(a, b, c) {
|
|
return null != a.addEventListener ? a.addEventListener(b, c, !1) : null != a.attachEvent ? a.attachEvent("on" + b, c) : a[b] = c
|
|
}
|
|
,
|
|
a.prototype.removeEvent = function(a, b, c) {
|
|
return null != a.removeEventListener ? a.removeEventListener(b, c, !1) : null != a.detachEvent ? a.detachEvent("on" + b, c) : delete a[b]
|
|
}
|
|
,
|
|
a.prototype.innerHeight = function() {
|
|
return "innerHeight"in window ? window.innerHeight : document.documentElement.clientHeight
|
|
}
|
|
,
|
|
a
|
|
}(),
|
|
c = this.WeakMap || this.MozWeakMap || (c = function() {
|
|
function a() {
|
|
this.keys = [],
|
|
this.values = []
|
|
}
|
|
return a.prototype.get = function(a) {
|
|
var b, c, d, e, f;
|
|
for (f = this.keys,
|
|
b = d = 0,
|
|
e = f.length; e > d; b = ++d)
|
|
if (c = f[b],
|
|
c === a)
|
|
return this.values[b]
|
|
}
|
|
,
|
|
a.prototype.set = function(a, b) {
|
|
var c, d, e, f, g;
|
|
for (g = this.keys,
|
|
c = e = 0,
|
|
f = g.length; f > e; c = ++e)
|
|
if (d = g[c],
|
|
d === a)
|
|
return void (this.values[c] = b);
|
|
return this.keys.push(a),
|
|
this.values.push(b)
|
|
}
|
|
,
|
|
a
|
|
}()),
|
|
a = this.MutationObserver || this.WebkitMutationObserver || this.MozMutationObserver || (a = function() {
|
|
function a() {
|
|
"undefined" != typeof console && null !== console && console.warn("MutationObserver is not supported by your browser."),
|
|
"undefined" != typeof console && null !== console && console.warn("WOW.js cannot detect dom mutations, please call .sync() after loading new content.")
|
|
}
|
|
return a.notSupported = !0,
|
|
a.prototype.observe = function() {}
|
|
,
|
|
a
|
|
}()),
|
|
d = this.getComputedStyle || function(a, b) {
|
|
return this.getPropertyValue = function(b) {
|
|
var c;
|
|
return "float" === b && (b = "styleFloat"),
|
|
e.test(b) && b.replace(e, function(a, b) {
|
|
return b.toUpperCase()
|
|
}),
|
|
(null != (c = a.currentStyle) ? c[b] : void 0) || null
|
|
}
|
|
,
|
|
this
|
|
}
|
|
,
|
|
e = /(\-([a-z]){1})/g,
|
|
this.WOW = function() {
|
|
function e(a) {
|
|
null == a && (a = {}),
|
|
this.scrollCallback = f(this.scrollCallback, this),
|
|
this.scrollHandler = f(this.scrollHandler, this),
|
|
this.resetAnimation = f(this.resetAnimation, this),
|
|
this.start = f(this.start, this),
|
|
this.scrolled = !0,
|
|
this.config = this.util().extend(a, this.defaults),
|
|
null != a.scrollContainer && (this.config.scrollContainer = document.querySelector(a.scrollContainer)),
|
|
this.animationNameCache = new c,
|
|
this.wowEvent = this.util().createEvent(this.config.boxClass)
|
|
}
|
|
return e.prototype.defaults = {
|
|
boxClass: "wow",
|
|
animateClass: "animated",
|
|
offset: 0,
|
|
mobile: !0,
|
|
live: !0,
|
|
callback: null,
|
|
scrollContainer: null
|
|
},
|
|
e.prototype.init = function() {
|
|
var a;
|
|
return this.element = window.document.documentElement,
|
|
"interactive" === (a = document.readyState) || "complete" === a ? this.start() : this.util().addEvent(document, "DOMContentLoaded", this.start),
|
|
this.finished = []
|
|
}
|
|
,
|
|
e.prototype.start = function() {
|
|
var b, c, d, e;
|
|
if (this.stopped = !1,
|
|
this.boxes = function() {
|
|
var a, c, d, e;
|
|
for (d = this.element.querySelectorAll("." + this.config.boxClass),
|
|
e = [],
|
|
a = 0,
|
|
c = d.length; c > a; a++)
|
|
b = d[a],
|
|
e.push(b);
|
|
return e
|
|
}
|
|
.call(this),
|
|
this.all = function() {
|
|
var a, c, d, e;
|
|
for (d = this.boxes,
|
|
e = [],
|
|
a = 0,
|
|
c = d.length; c > a; a++)
|
|
b = d[a],
|
|
e.push(b);
|
|
return e
|
|
}
|
|
.call(this),
|
|
this.boxes.length)
|
|
if (this.disabled())
|
|
this.resetStyle();
|
|
else
|
|
for (e = this.boxes,
|
|
c = 0,
|
|
d = e.length; d > c; c++)
|
|
b = e[c],
|
|
this.applyStyle(b, !0);
|
|
return this.disabled() || (this.util().addEvent(this.config.scrollContainer || window, "scroll", this.scrollHandler),
|
|
this.util().addEvent(window, "resize", this.scrollHandler),
|
|
this.interval = setInterval(this.scrollCallback, 50)),
|
|
this.config.live ? new a(function(a) {
|
|
return function(b) {
|
|
var c, d, e, f, g;
|
|
for (g = [],
|
|
c = 0,
|
|
d = b.length; d > c; c++)
|
|
f = b[c],
|
|
g.push(function() {
|
|
var a, b, c, d;
|
|
for (c = f.addedNodes || [],
|
|
d = [],
|
|
a = 0,
|
|
b = c.length; b > a; a++)
|
|
e = c[a],
|
|
d.push(this.doSync(e));
|
|
return d
|
|
}
|
|
.call(a));
|
|
return g
|
|
}
|
|
}(this)).observe(document.body, {
|
|
childList: !0,
|
|
subtree: !0
|
|
}) : void 0
|
|
}
|
|
,
|
|
e.prototype.stop = function() {
|
|
return this.stopped = !0,
|
|
this.util().removeEvent(this.config.scrollContainer || window, "scroll", this.scrollHandler),
|
|
this.util().removeEvent(window, "resize", this.scrollHandler),
|
|
null != this.interval ? clearInterval(this.interval) : void 0
|
|
}
|
|
,
|
|
e.prototype.sync = function(b) {
|
|
return a.notSupported ? this.doSync(this.element) : void 0
|
|
}
|
|
,
|
|
e.prototype.doSync = function(a) {
|
|
var b, c, d, e, f;
|
|
if (null == a && (a = this.element),
|
|
1 === a.nodeType) {
|
|
for (a = a.parentNode || a,
|
|
e = a.querySelectorAll("." + this.config.boxClass),
|
|
f = [],
|
|
c = 0,
|
|
d = e.length; d > c; c++)
|
|
b = e[c],
|
|
g.call(this.all, b) < 0 ? (this.boxes.push(b),
|
|
this.all.push(b),
|
|
this.stopped || this.disabled() ? this.resetStyle() : this.applyStyle(b, !0),
|
|
f.push(this.scrolled = !0)) : f.push(void 0);
|
|
return f
|
|
}
|
|
}
|
|
,
|
|
e.prototype.show = function(a) {
|
|
return this.applyStyle(a),
|
|
a.className = a.className + " " + this.config.animateClass,
|
|
null != this.config.callback && this.config.callback(a),
|
|
this.util().emitEvent(a, this.wowEvent),
|
|
this.util().addEvent(a, "animationend", this.resetAnimation),
|
|
this.util().addEvent(a, "oanimationend", this.resetAnimation),
|
|
this.util().addEvent(a, "webkitAnimationEnd", this.resetAnimation),
|
|
this.util().addEvent(a, "MSAnimationEnd", this.resetAnimation),
|
|
a
|
|
}
|
|
,
|
|
e.prototype.applyStyle = function(a, b) {
|
|
var c, d, e;
|
|
return d = a.getAttribute("data-wow-duration"),
|
|
c = a.getAttribute("data-wow-delay"),
|
|
e = a.getAttribute("data-wow-iteration"),
|
|
this.animate(function(f) {
|
|
return function() {
|
|
return f.customStyle(a, b, d, c, e)
|
|
}
|
|
}(this))
|
|
}
|
|
,
|
|
e.prototype.animate = function() {
|
|
return "requestAnimationFrame"in window ? function(a) {
|
|
return window.requestAnimationFrame(a)
|
|
}
|
|
: function(a) {
|
|
return a()
|
|
}
|
|
}(),
|
|
e.prototype.resetStyle = function() {
|
|
var a, b, c, d, e;
|
|
for (d = this.boxes,
|
|
e = [],
|
|
b = 0,
|
|
c = d.length; c > b; b++)
|
|
a = d[b],
|
|
e.push(a.style.visibility = "visible");
|
|
return e
|
|
}
|
|
,
|
|
e.prototype.resetAnimation = function(a) {
|
|
var b;
|
|
return a.type.toLowerCase().indexOf("animationend") >= 0 ? (b = a.target || a.srcElement,
|
|
b.className = b.className.replace(this.config.animateClass, "").trim()) : void 0
|
|
}
|
|
,
|
|
e.prototype.customStyle = function(a, b, c, d, e) {
|
|
return b && this.cacheAnimationName(a),
|
|
a.style.visibility = b ? "hidden" : "visible",
|
|
c && this.vendorSet(a.style, {
|
|
animationDuration: c
|
|
}),
|
|
d && this.vendorSet(a.style, {
|
|
animationDelay: d
|
|
}),
|
|
e && this.vendorSet(a.style, {
|
|
animationIterationCount: e
|
|
}),
|
|
this.vendorSet(a.style, {
|
|
animationName: b ? "none" : this.cachedAnimationName(a)
|
|
}),
|
|
a
|
|
}
|
|
,
|
|
e.prototype.vendors = ["moz", "webkit"],
|
|
e.prototype.vendorSet = function(a, b) {
|
|
var c, d, e, f;
|
|
d = [];
|
|
for (c in b)
|
|
e = b[c],
|
|
a["" + c] = e,
|
|
d.push(function() {
|
|
var b, d, g, h;
|
|
for (g = this.vendors,
|
|
h = [],
|
|
b = 0,
|
|
d = g.length; d > b; b++)
|
|
f = g[b],
|
|
h.push(a["" + f + c.charAt(0).toUpperCase() + c.substr(1)] = e);
|
|
return h
|
|
}
|
|
.call(this));
|
|
return d
|
|
}
|
|
,
|
|
e.prototype.vendorCSS = function(a, b) {
|
|
var c, e, f, g, h, i;
|
|
for (h = d(a),
|
|
g = h.getPropertyCSSValue(b),
|
|
f = this.vendors,
|
|
c = 0,
|
|
e = f.length; e > c; c++)
|
|
i = f[c],
|
|
g = g || h.getPropertyCSSValue("-" + i + "-" + b);
|
|
return g
|
|
}
|
|
,
|
|
e.prototype.animationName = function(a) {
|
|
var b;
|
|
try {
|
|
b = this.vendorCSS(a, "animation-name").cssText
|
|
} catch (c) {
|
|
b = d(a).getPropertyValue("animation-name")
|
|
}
|
|
return "none" === b ? "" : b
|
|
}
|
|
,
|
|
e.prototype.cacheAnimationName = function(a) {
|
|
return this.animationNameCache.set(a, this.animationName(a))
|
|
}
|
|
,
|
|
e.prototype.cachedAnimationName = function(a) {
|
|
return this.animationNameCache.get(a)
|
|
}
|
|
,
|
|
e.prototype.scrollHandler = function() {
|
|
return this.scrolled = !0
|
|
}
|
|
,
|
|
e.prototype.scrollCallback = function() {
|
|
var a;
|
|
return !this.scrolled || (this.scrolled = !1,
|
|
this.boxes = function() {
|
|
var b, c, d, e;
|
|
for (d = this.boxes,
|
|
e = [],
|
|
b = 0,
|
|
c = d.length; c > b; b++)
|
|
a = d[b],
|
|
a && (this.isVisible(a) ? this.show(a) : e.push(a));
|
|
return e
|
|
}
|
|
.call(this),
|
|
this.boxes.length || this.config.live) ? void 0 : this.stop()
|
|
}
|
|
,
|
|
e.prototype.offsetTop = function(a) {
|
|
for (var b; void 0 === a.offsetTop; )
|
|
a = a.parentNode;
|
|
for (b = a.offsetTop; a = a.offsetParent; )
|
|
b += a.offsetTop;
|
|
return b
|
|
}
|
|
,
|
|
e.prototype.isVisible = function(a) {
|
|
var b, c, d, e, f;
|
|
return c = a.getAttribute("data-wow-offset") || this.config.offset,
|
|
f = this.config.scrollContainer && this.config.scrollContainer.scrollTop || window.pageYOffset,
|
|
e = f + Math.min(this.element.clientHeight, this.util().innerHeight()) - c,
|
|
d = this.offsetTop(a),
|
|
b = d + a.clientHeight,
|
|
e >= d && b >= f
|
|
}
|
|
,
|
|
e.prototype.util = function() {
|
|
return null != this._util ? this._util : this._util = new b
|
|
}
|
|
,
|
|
e.prototype.disabled = function() {
|
|
return !this.config.mobile && this.util().isMobile(navigator.userAgent)
|
|
}
|
|
,
|
|
e
|
|
}()
|
|
}
|
|
).call(this);
|