695 lines
No EOL
30 KiB
JavaScript
695 lines
No EOL
30 KiB
JavaScript
/*! ScrollMagic v2.0.5 | (c) 2015 Jan Paepke (@janpaepke) | license & info: http://scrollmagic.io */
|
|
|
|
! function (e, t) {
|
|
"function" == typeof define && define.amd ? define(t) : "object" == typeof exports ? module.exports = t() : e.ScrollMagic = t()
|
|
}(this, function () {
|
|
"use strict";
|
|
var e = function () {};
|
|
e.version = "2.0.5", window.addEventListener("mousewheel", function () {});
|
|
var t = "data-scrollmagic-pin-spacer";
|
|
e.Controller = function (r) {
|
|
var o, s, a = "ScrollMagic.Controller",
|
|
l = "FORWARD",
|
|
c = "REVERSE",
|
|
u = "PAUSED",
|
|
f = n.defaults,
|
|
d = this,
|
|
h = i.extend({}, f, r),
|
|
g = [],
|
|
p = !1,
|
|
v = 0,
|
|
m = u,
|
|
w = !0,
|
|
y = 0,
|
|
S = !0,
|
|
b = function () {
|
|
for (var e in h) f.hasOwnProperty(e) || delete h[e];
|
|
if (h.container = i.get.elements(h.container)[0], !h.container) throw a + " init failed.";
|
|
w = h.container === window || h.container === document.body || !document.body.contains(h.container), w && (h.container = window), y = z(), h.container.addEventListener("resize", T), h.container.addEventListener("scroll", T), h.refreshInterval = parseInt(h.refreshInterval) || f.refreshInterval, E()
|
|
},
|
|
E = function () {
|
|
h.refreshInterval > 0 && (s = window.setTimeout(A, h.refreshInterval))
|
|
},
|
|
x = function () {
|
|
return h.vertical ? i.get.scrollTop(h.container) : i.get.scrollLeft(h.container)
|
|
},
|
|
z = function () {
|
|
return h.vertical ? i.get.height(h.container) : i.get.width(h.container)
|
|
},
|
|
C = this._setScrollPos = function (e) {
|
|
h.vertical ? w ? window.scrollTo(i.get.scrollLeft(), e) : h.container.scrollTop = e : w ? window.scrollTo(e, i.get.scrollTop()) : h.container.scrollLeft = e
|
|
},
|
|
F = function () {
|
|
if (S && p) {
|
|
var e = i.type.Array(p) ? p : g.slice(0);
|
|
p = !1;
|
|
var t = v;
|
|
v = d.scrollPos();
|
|
var n = v - t;
|
|
0 !== n && (m = n > 0 ? l : c), m === c && e.reverse(), e.forEach(function (e) {
|
|
e.update(!0)
|
|
})
|
|
}
|
|
},
|
|
L = function () {
|
|
o = i.rAF(F)
|
|
},
|
|
T = function (e) {
|
|
"resize" == e.type && (y = z(), m = u), p !== !0 && (p = !0, L())
|
|
},
|
|
A = function () {
|
|
if (!w && y != z()) {
|
|
var e;
|
|
try {
|
|
e = new Event("resize", {
|
|
bubbles: !1,
|
|
cancelable: !1
|
|
})
|
|
} catch (t) {
|
|
e = document.createEvent("Event"), e.initEvent("resize", !1, !1)
|
|
}
|
|
h.container.dispatchEvent(e)
|
|
}
|
|
g.forEach(function (e) {
|
|
e.refresh()
|
|
}), E()
|
|
};
|
|
this._options = h;
|
|
var O = function (e) {
|
|
if (e.length <= 1) return e;
|
|
var t = e.slice(0);
|
|
return t.sort(function (e, t) {
|
|
return e.scrollOffset() > t.scrollOffset() ? 1 : -1
|
|
}), t
|
|
};
|
|
return this.addScene = function (t) {
|
|
if (i.type.Array(t)) t.forEach(function (e) {
|
|
d.addScene(e)
|
|
});
|
|
else if (t instanceof e.Scene)
|
|
if (t.controller() !== d) t.addTo(d);
|
|
else if (g.indexOf(t) < 0) {
|
|
g.push(t), g = O(g), t.on("shift.controller_sort", function () {
|
|
g = O(g)
|
|
});
|
|
for (var n in h.globalSceneOptions) t[n] && t[n].call(t, h.globalSceneOptions[n])
|
|
}
|
|
return d
|
|
}, this.removeScene = function (e) {
|
|
if (i.type.Array(e)) e.forEach(function (e) {
|
|
d.removeScene(e)
|
|
});
|
|
else {
|
|
var t = g.indexOf(e);
|
|
t > -1 && (e.off("shift.controller_sort"), g.splice(t, 1), e.remove())
|
|
}
|
|
return d
|
|
}, this.updateScene = function (t, n) {
|
|
return i.type.Array(t) ? t.forEach(function (e) {
|
|
d.updateScene(e, n)
|
|
}) : n ? t.update(!0) : p !== !0 && t instanceof e.Scene && (p = p || [], -1 == p.indexOf(t) && p.push(t), p = O(p), L()), d
|
|
}, this.update = function (e) {
|
|
return T({
|
|
type: "resize"
|
|
}), e && F(), d
|
|
}, this.scrollTo = function (n, r) {
|
|
if (i.type.Number(n)) C.call(h.container, n, r);
|
|
else if (n instanceof e.Scene) n.controller() === d && d.scrollTo(n.scrollOffset(), r);
|
|
else if (i.type.Function(n)) C = n;
|
|
else {
|
|
var o = i.get.elements(n)[0];
|
|
if (o) {
|
|
for (; o.parentNode.hasAttribute(t);) o = o.parentNode;
|
|
var s = h.vertical ? "top" : "left",
|
|
a = i.get.offset(h.container),
|
|
l = i.get.offset(o);
|
|
w || (a[s] -= d.scrollPos()), d.scrollTo(l[s] - a[s], r)
|
|
}
|
|
}
|
|
return d
|
|
}, this.scrollPos = function (e) {
|
|
return arguments.length ? (i.type.Function(e) && (x = e), d) : x.call(d)
|
|
}, this.info = function (e) {
|
|
var t = {
|
|
size: y,
|
|
vertical: h.vertical,
|
|
scrollPos: v,
|
|
scrollDirection: m,
|
|
container: h.container,
|
|
isDocument: w
|
|
};
|
|
return arguments.length ? void 0 !== t[e] ? t[e] : void 0 : t
|
|
}, this.loglevel = function () {
|
|
return d
|
|
}, this.enabled = function (e) {
|
|
return arguments.length ? (S != e && (S = !!e, d.updateScene(g, !0)), d) : S
|
|
}, this.destroy = function (e) {
|
|
window.clearTimeout(s);
|
|
for (var t = g.length; t--;) g[t].destroy(e);
|
|
return h.container.removeEventListener("resize", T), h.container.removeEventListener("scroll", T), i.cAF(o), null
|
|
}, b(), d
|
|
};
|
|
var n = {
|
|
defaults: {
|
|
container: window,
|
|
vertical: !0,
|
|
globalSceneOptions: {},
|
|
loglevel: 2,
|
|
refreshInterval: 100
|
|
}
|
|
};
|
|
e.Controller.addOption = function (e, t) {
|
|
n.defaults[e] = t
|
|
}, e.Controller.extend = function (t) {
|
|
var n = this;
|
|
e.Controller = function () {
|
|
return n.apply(this, arguments), this.$super = i.extend({}, this), t.apply(this, arguments) || this
|
|
}, i.extend(e.Controller, n), e.Controller.prototype = n.prototype, e.Controller.prototype.constructor = e.Controller
|
|
}, e.Scene = function (n) {
|
|
var o, s, a = "BEFORE",
|
|
l = "DURING",
|
|
c = "AFTER",
|
|
u = r.defaults,
|
|
f = this,
|
|
d = i.extend({}, u, n),
|
|
h = a,
|
|
g = 0,
|
|
p = {
|
|
start: 0,
|
|
end: 0
|
|
},
|
|
v = 0,
|
|
m = !0,
|
|
w = function () {
|
|
for (var e in d) u.hasOwnProperty(e) || delete d[e];
|
|
for (var t in u) L(t);
|
|
C()
|
|
},
|
|
y = {};
|
|
this.on = function (e, t) {
|
|
return i.type.Function(t) && (e = e.trim().split(" "), e.forEach(function (e) {
|
|
var n = e.split("."),
|
|
r = n[0],
|
|
i = n[1];
|
|
"*" != r && (y[r] || (y[r] = []), y[r].push({
|
|
namespace: i || "",
|
|
callback: t
|
|
}))
|
|
})), f
|
|
}, this.off = function (e, t) {
|
|
return e ? (e = e.trim().split(" "), e.forEach(function (e) {
|
|
var n = e.split("."),
|
|
r = n[0],
|
|
i = n[1] || "",
|
|
o = "*" === r ? Object.keys(y) : [r];
|
|
o.forEach(function (e) {
|
|
for (var n = y[e] || [], r = n.length; r--;) {
|
|
var o = n[r];
|
|
!o || i !== o.namespace && "*" !== i || t && t != o.callback || n.splice(r, 1)
|
|
}
|
|
n.length || delete y[e]
|
|
})
|
|
}), f) : f
|
|
}, this.trigger = function (t, n) {
|
|
if (t) {
|
|
var r = t.trim().split("."),
|
|
i = r[0],
|
|
o = r[1],
|
|
s = y[i];
|
|
s && s.forEach(function (t) {
|
|
o && o !== t.namespace || t.callback.call(f, new e.Event(i, t.namespace, f, n))
|
|
})
|
|
}
|
|
return f
|
|
}, f.on("change.internal", function (e) {
|
|
"loglevel" !== e.what && "tweenChanges" !== e.what && ("triggerElement" === e.what ? E() : "reverse" === e.what && f.update())
|
|
}).on("shift.internal", function () {
|
|
S(), f.update()
|
|
}), this.addTo = function (t) {
|
|
return t instanceof e.Controller && s != t && (s && s.removeScene(f), s = t, C(), b(!0), E(!0), S(), s.info("container").addEventListener("resize", x), t.addScene(f), f.trigger("add", {
|
|
controller: s
|
|
}), f.update()), f
|
|
}, this.enabled = function (e) {
|
|
return arguments.length ? (m != e && (m = !!e, f.update(!0)), f) : m
|
|
}, this.remove = function () {
|
|
if (s) {
|
|
s.info("container").removeEventListener("resize", x);
|
|
var e = s;
|
|
s = void 0, e.removeScene(f), f.trigger("remove")
|
|
}
|
|
return f
|
|
}, this.destroy = function (e) {
|
|
return f.trigger("destroy", {
|
|
reset: e
|
|
}), f.remove(), f.off("*.*"), null
|
|
}, this.update = function (e) {
|
|
if (s)
|
|
if (e)
|
|
if (s.enabled() && m) {
|
|
var t, n = s.info("scrollPos");
|
|
t = d.duration > 0 ? (n - p.start) / (p.end - p.start) : n >= p.start ? 1 : 0, f.trigger("update", {
|
|
startPos: p.start,
|
|
endPos: p.end,
|
|
scrollPos: n
|
|
}), f.progress(t)
|
|
} else T && h === l && O(!0);
|
|
else s.updateScene(f, !1);
|
|
return f
|
|
}, this.refresh = function () {
|
|
return b(), E(), f
|
|
}, this.progress = function (e) {
|
|
if (arguments.length) {
|
|
var t = !1,
|
|
n = h,
|
|
r = s ? s.info("scrollDirection") : "PAUSED",
|
|
i = d.reverse || e >= g;
|
|
if (0 === d.duration ? (t = g != e, g = 1 > e && i ? 0 : 1, h = 0 === g ? a : l) : 0 > e && h !== a && i ? (g = 0, h = a, t = !0) : e >= 0 && 1 > e && i ? (g = e, h = l, t = !0) : e >= 1 && h !== c ? (g = 1, h = c, t = !0) : h !== l || i || O(), t) {
|
|
var o = {
|
|
progress: g,
|
|
state: h,
|
|
scrollDirection: r
|
|
},
|
|
u = h != n,
|
|
p = function (e) {
|
|
f.trigger(e, o)
|
|
};
|
|
u && n !== l && (p("enter"), p(n === a ? "start" : "end")), p("progress"), u && h !== l && (p(h === a ? "start" : "end"), p("leave"))
|
|
}
|
|
return f
|
|
}
|
|
return g
|
|
};
|
|
var S = function () {
|
|
p = {
|
|
start: v + d.offset
|
|
}, s && d.triggerElement && (p.start -= s.info("size") * d.triggerHook), p.end = p.start + d.duration
|
|
},
|
|
b = function (e) {
|
|
if (o) {
|
|
var t = "duration";
|
|
F(t, o.call(f)) && !e && (f.trigger("change", {
|
|
what: t,
|
|
newval: d[t]
|
|
}), f.trigger("shift", {
|
|
reason: t
|
|
}))
|
|
}
|
|
},
|
|
E = function (e) {
|
|
var n = 0,
|
|
r = d.triggerElement;
|
|
if (s && r) {
|
|
for (var o = s.info(), a = i.get.offset(o.container), l = o.vertical ? "top" : "left"; r.parentNode.hasAttribute(t);) r = r.parentNode;
|
|
var c = i.get.offset(r);
|
|
o.isDocument || (a[l] -= s.scrollPos()), n = c[l] - a[l]
|
|
}
|
|
var u = n != v;
|
|
v = n, u && !e && f.trigger("shift", {
|
|
reason: "triggerElementPosition"
|
|
})
|
|
},
|
|
x = function () {
|
|
d.triggerHook > 0 && f.trigger("shift", {
|
|
reason: "containerResize"
|
|
})
|
|
},
|
|
z = i.extend(r.validate, {
|
|
duration: function (e) {
|
|
if (i.type.String(e) && e.match(/^(\.|\d)*\d+%$/)) {
|
|
var t = parseFloat(e) / 100;
|
|
e = function () {
|
|
return s ? s.info("size") * t : 0
|
|
}
|
|
}
|
|
if (i.type.Function(e)) {
|
|
o = e;
|
|
try {
|
|
e = parseFloat(o())
|
|
} catch (t) {
|
|
e = -1
|
|
}
|
|
}
|
|
if (e = parseFloat(e), !i.type.Number(e) || 0 > e) throw o ? (o = void 0, 0) : 0;
|
|
return e
|
|
}
|
|
}),
|
|
C = function (e) {
|
|
e = arguments.length ? [e] : Object.keys(z), e.forEach(function (e) {
|
|
var t;
|
|
if (z[e]) try {
|
|
t = z[e](d[e])
|
|
} catch (n) {
|
|
t = u[e]
|
|
} finally {
|
|
d[e] = t
|
|
}
|
|
})
|
|
},
|
|
F = function (e, t) {
|
|
var n = !1,
|
|
r = d[e];
|
|
return d[e] != t && (d[e] = t, C(e), n = r != d[e]), n
|
|
},
|
|
L = function (e) {
|
|
f[e] || (f[e] = function (t) {
|
|
return arguments.length ? ("duration" === e && (o = void 0), F(e, t) && (f.trigger("change", {
|
|
what: e,
|
|
newval: d[e]
|
|
}), r.shifts.indexOf(e) > -1 && f.trigger("shift", {
|
|
reason: e
|
|
})), f) : d[e]
|
|
})
|
|
};
|
|
this.controller = function () {
|
|
return s
|
|
}, this.state = function () {
|
|
return h
|
|
}, this.scrollOffset = function () {
|
|
return p.start
|
|
}, this.triggerPosition = function () {
|
|
var e = d.offset;
|
|
return s && (e += d.triggerElement ? v : s.info("size") * f.triggerHook()), e
|
|
};
|
|
var T, A;
|
|
f.on("shift.internal", function (e) {
|
|
var t = "duration" === e.reason;
|
|
(h === c && t || h === l && 0 === d.duration) && O(), t && _()
|
|
}).on("progress.internal", function () {
|
|
O()
|
|
}).on("add.internal", function () {
|
|
_()
|
|
}).on("destroy.internal", function (e) {
|
|
f.removePin(e.reset)
|
|
});
|
|
var O = function (e) {
|
|
if (T && s) {
|
|
var t = s.info(),
|
|
n = A.spacer.firstChild;
|
|
if (e || h !== l) {
|
|
var r = {
|
|
position: A.inFlow ? "relative" : "absolute",
|
|
top: 0,
|
|
left: 0
|
|
},
|
|
o = i.css(n, "position") != r.position;
|
|
A.pushFollowers ? d.duration > 0 && (h === c && 0 === parseFloat(i.css(A.spacer, "padding-top")) ? o = !0 : h === a && 0 === parseFloat(i.css(A.spacer, "padding-bottom")) && (o = !0)) : r[t.vertical ? "top" : "left"] = d.duration * g, i.css(n, r), o && _()
|
|
} else {
|
|
"fixed" != i.css(n, "position") && (i.css(n, {
|
|
position: "fixed"
|
|
}), _());
|
|
var u = i.get.offset(A.spacer, !0),
|
|
f = d.reverse || 0 === d.duration ? t.scrollPos - p.start : Math.round(g * d.duration * 10) / 10;
|
|
u[t.vertical ? "top" : "left"] += f, i.css(A.spacer.firstChild, {
|
|
top: u.top,
|
|
left: u.left
|
|
})
|
|
}
|
|
}
|
|
},
|
|
_ = function () {
|
|
if (T && s && A.inFlow) {
|
|
var e = h === l,
|
|
t = s.info("vertical"),
|
|
n = A.spacer.firstChild,
|
|
r = i.isMarginCollapseType(i.css(A.spacer, "display")),
|
|
o = {};
|
|
A.relSize.width || A.relSize.autoFullWidth ? e ? i.css(T, {
|
|
width: i.get.width(A.spacer)
|
|
}) : i.css(T, {
|
|
width: "100%"
|
|
}) : (o["min-width"] = i.get.width(t ? T : n, !0, !0), o.width = e ? o["min-width"] : "auto"), A.relSize.height ? e ? i.css(T, {
|
|
height: i.get.height(A.spacer) - (A.pushFollowers ? d.duration : 0)
|
|
}) : i.css(T, {
|
|
height: "100%"
|
|
}) : (o["min-height"] = i.get.height(t ? n : T, !0, !r), o.height = e ? o["min-height"] : "auto"), A.pushFollowers && (o["padding" + (t ? "Top" : "Left")] = d.duration * g, o["padding" + (t ? "Bottom" : "Right")] = d.duration * (1 - g)), i.css(A.spacer, o)
|
|
}
|
|
},
|
|
N = function () {
|
|
s && T && h === l && !s.info("isDocument") && O()
|
|
},
|
|
P = function () {
|
|
s && T && h === l && ((A.relSize.width || A.relSize.autoFullWidth) && i.get.width(window) != i.get.width(A.spacer.parentNode) || A.relSize.height && i.get.height(window) != i.get.height(A.spacer.parentNode)) && _()
|
|
},
|
|
D = function (e) {
|
|
s && T && h === l && !s.info("isDocument") && (e.preventDefault(), s._setScrollPos(s.info("scrollPos") - ((e.wheelDelta || e[s.info("vertical") ? "wheelDeltaY" : "wheelDeltaX"]) / 3 || 30 * -e.detail)))
|
|
};
|
|
this.setPin = function (e, n) {
|
|
var r = {
|
|
pushFollowers: !0,
|
|
spacerClass: "scrollmagic-pin-spacer"
|
|
};
|
|
if (n = i.extend({}, r, n), e = i.get.elements(e)[0], !e) return f;
|
|
if ("fixed" === i.css(e, "position")) return f;
|
|
if (T) {
|
|
if (T === e) return f;
|
|
f.removePin()
|
|
}
|
|
T = e;
|
|
var o = T.parentNode.style.display,
|
|
s = ["top", "left", "bottom", "right", "margin", "marginLeft", "marginRight", "marginTop", "marginBottom"];
|
|
T.parentNode.style.display = "none";
|
|
var a = "absolute" != i.css(T, "position"),
|
|
l = i.css(T, s.concat(["display"])),
|
|
c = i.css(T, ["width", "height"]);
|
|
T.parentNode.style.display = o, !a && n.pushFollowers && (n.pushFollowers = !1);
|
|
var u = T.parentNode.insertBefore(document.createElement("div"), T),
|
|
d = i.extend(l, {
|
|
position: a ? "relative" : "absolute",
|
|
boxSizing: "content-box",
|
|
mozBoxSizing: "content-box",
|
|
webkitBoxSizing: "content-box"
|
|
});
|
|
if (a || i.extend(d, i.css(T, ["width", "height"])), i.css(u, d), u.setAttribute(t, ""), i.addClass(u, n.spacerClass), A = {
|
|
spacer: u,
|
|
relSize: {
|
|
width: "%" === c.width.slice(-1),
|
|
height: "%" === c.height.slice(-1),
|
|
autoFullWidth: "auto" === c.width && a && i.isMarginCollapseType(l.display)
|
|
},
|
|
pushFollowers: n.pushFollowers,
|
|
inFlow: a
|
|
}, !T.___origStyle) {
|
|
T.___origStyle = {};
|
|
var h = T.style,
|
|
g = s.concat(["width", "height", "position", "boxSizing", "mozBoxSizing", "webkitBoxSizing"]);
|
|
g.forEach(function (e) {
|
|
T.___origStyle[e] = h[e] || ""
|
|
})
|
|
}
|
|
return A.relSize.width && i.css(u, {
|
|
width: c.width
|
|
}), A.relSize.height && i.css(u, {
|
|
height: c.height
|
|
}), u.appendChild(T), i.css(T, {
|
|
position: a ? "relative" : "absolute",
|
|
margin: "auto",
|
|
top: "auto",
|
|
left: "auto",
|
|
bottom: "auto",
|
|
right: "auto"
|
|
}), (A.relSize.width || A.relSize.autoFullWidth) && i.css(T, {
|
|
boxSizing: "border-box",
|
|
mozBoxSizing: "border-box",
|
|
webkitBoxSizing: "border-box"
|
|
}), window.addEventListener("scroll", N), window.addEventListener("resize", N), window.addEventListener("resize", P), T.addEventListener("mousewheel", D), T.addEventListener("DOMMouseScroll", D), O(), f
|
|
}, this.removePin = function (e) {
|
|
if (T) {
|
|
if (h === l && O(!0), e || !s) {
|
|
var n = A.spacer.firstChild;
|
|
if (n.hasAttribute(t)) {
|
|
var r = A.spacer.style,
|
|
o = ["margin", "marginLeft", "marginRight", "marginTop", "marginBottom"];
|
|
margins = {}, o.forEach(function (e) {
|
|
margins[e] = r[e] || ""
|
|
}), i.css(n, margins)
|
|
}
|
|
A.spacer.parentNode.insertBefore(n, A.spacer), A.spacer.parentNode.removeChild(A.spacer), T.parentNode.hasAttribute(t) || (i.css(T, T.___origStyle), delete T.___origStyle)
|
|
}
|
|
window.removeEventListener("scroll", N), window.removeEventListener("resize", N), window.removeEventListener("resize", P), T.removeEventListener("mousewheel", D), T.removeEventListener("DOMMouseScroll", D), T = void 0
|
|
}
|
|
return f
|
|
};
|
|
var R, k = [];
|
|
return f.on("destroy.internal", function (e) {
|
|
f.removeClassToggle(e.reset)
|
|
}), this.setClassToggle = function (e, t) {
|
|
var n = i.get.elements(e);
|
|
return 0 !== n.length && i.type.String(t) ? (k.length > 0 && f.removeClassToggle(), R = t, k = n, f.on("enter.internal_class leave.internal_class", function (e) {
|
|
var t = "enter" === e.type ? i.addClass : i.removeClass;
|
|
k.forEach(function (e) {
|
|
t(e, R)
|
|
})
|
|
}), f) : f
|
|
}, this.removeClassToggle = function (e) {
|
|
return e && k.forEach(function (e) {
|
|
i.removeClass(e, R)
|
|
}), f.off("start.internal_class end.internal_class"), R = void 0, k = [], f
|
|
}, w(), f
|
|
};
|
|
var r = {
|
|
defaults: {
|
|
duration: 0,
|
|
offset: 0,
|
|
triggerElement: void 0,
|
|
triggerHook: .5,
|
|
reverse: !0,
|
|
loglevel: 2
|
|
},
|
|
validate: {
|
|
offset: function (e) {
|
|
if (e = parseFloat(e), !i.type.Number(e)) throw 0;
|
|
return e
|
|
},
|
|
triggerElement: function (e) {
|
|
if (e = e || void 0) {
|
|
var t = i.get.elements(e)[0];
|
|
if (!t) throw 0;
|
|
e = t
|
|
}
|
|
return e
|
|
},
|
|
triggerHook: function (e) {
|
|
var t = {
|
|
onCenter: .5,
|
|
onEnter: 1,
|
|
onLeave: 0
|
|
};
|
|
if (i.type.Number(e)) e = Math.max(0, Math.min(parseFloat(e), 1));
|
|
else {
|
|
if (!(e in t)) throw 0;
|
|
e = t[e]
|
|
}
|
|
return e
|
|
},
|
|
reverse: function (e) {
|
|
return !!e
|
|
}
|
|
},
|
|
shifts: ["duration", "offset", "triggerHook"]
|
|
};
|
|
e.Scene.addOption = function (e, t, n, i) {
|
|
e in r.defaults || (r.defaults[e] = t, r.validate[e] = n, i && r.shifts.push(e))
|
|
}, e.Scene.extend = function (t) {
|
|
var n = this;
|
|
e.Scene = function () {
|
|
return n.apply(this, arguments), this.$super = i.extend({}, this), t.apply(this, arguments) || this
|
|
}, i.extend(e.Scene, n), e.Scene.prototype = n.prototype, e.Scene.prototype.constructor = e.Scene
|
|
}, e.Event = function (e, t, n, r) {
|
|
r = r || {};
|
|
for (var i in r) this[i] = r[i];
|
|
return this.type = e, this.target = this.currentTarget = n, this.namespace = t || "", this.timeStamp = this.timestamp = Date.now(), this
|
|
};
|
|
var i = e._util = function (e) {
|
|
var t, n = {},
|
|
r = function (e) {
|
|
return parseFloat(e) || 0
|
|
},
|
|
i = function (t) {
|
|
return t.currentStyle ? t.currentStyle : e.getComputedStyle(t)
|
|
},
|
|
o = function (t, n, o, s) {
|
|
if (n = n === document ? e : n, n === e) s = !1;
|
|
else if (!f.DomElement(n)) return 0;
|
|
t = t.charAt(0).toUpperCase() + t.substr(1).toLowerCase();
|
|
var a = (o ? n["offset" + t] || n["outer" + t] : n["client" + t] || n["inner" + t]) || 0;
|
|
if (o && s) {
|
|
var l = i(n);
|
|
a += "Height" === t ? r(l.marginTop) + r(l.marginBottom) : r(l.marginLeft) + r(l.marginRight)
|
|
}
|
|
return a
|
|
},
|
|
s = function (e) {
|
|
return e.replace(/^[^a-z]+([a-z])/g, "$1").replace(/-([a-z])/g, function (e) {
|
|
return e[1].toUpperCase()
|
|
})
|
|
};
|
|
n.extend = function (e) {
|
|
for (e = e || {}, t = 1; t < arguments.length; t++)
|
|
if (arguments[t])
|
|
for (var n in arguments[t]) arguments[t].hasOwnProperty(n) && (e[n] = arguments[t][n]);
|
|
return e
|
|
}, n.isMarginCollapseType = function (e) {
|
|
return ["block", "flex", "list-item", "table", "-webkit-box"].indexOf(e) > -1
|
|
};
|
|
var a = 0,
|
|
l = ["ms", "moz", "webkit", "o"],
|
|
c = e.requestAnimationFrame,
|
|
u = e.cancelAnimationFrame;
|
|
for (t = 0; !c && t < l.length; ++t) c = e[l[t] + "RequestAnimationFrame"], u = e[l[t] + "CancelAnimationFrame"] || e[l[t] + "CancelRequestAnimationFrame"];
|
|
c || (c = function (t) {
|
|
var n = (new Date).getTime(),
|
|
r = Math.max(0, 16 - (n - a)),
|
|
i = e.setTimeout(function () {
|
|
t(n + r)
|
|
}, r);
|
|
return a = n + r, i
|
|
}), u || (u = function (t) {
|
|
e.clearTimeout(t)
|
|
}), n.rAF = c.bind(e), n.cAF = u.bind(e);
|
|
var f = n.type = function (e) {
|
|
return Object.prototype.toString.call(e).replace(/^\[object (.+)\]$/, "$1").toLowerCase()
|
|
};
|
|
f.String = function (e) {
|
|
return "string" === f(e)
|
|
}, f.Function = function (e) {
|
|
return "function" === f(e)
|
|
}, f.Array = function (e) {
|
|
return Array.isArray(e)
|
|
}, f.Number = function (e) {
|
|
return !f.Array(e) && e - parseFloat(e) + 1 >= 0
|
|
}, f.DomElement = function (e) {
|
|
return "object" == typeof HTMLElement ? e instanceof HTMLElement : e && "object" == typeof e && null !== e && 1 === e.nodeType && "string" == typeof e.nodeName
|
|
};
|
|
var d = n.get = {};
|
|
return d.elements = function (t) {
|
|
var n = [];
|
|
if (f.String(t)) try {
|
|
t = document.querySelectorAll(t)
|
|
} catch (e) {
|
|
return n
|
|
}
|
|
if ("nodelist" === f(t) || f.Array(t))
|
|
for (var r = 0, i = n.length = t.length; i > r; r++) {
|
|
var o = t[r];
|
|
n[r] = f.DomElement(o) ? o : d.elements(o)
|
|
} else(f.DomElement(t) || t === document || t === e) && (n = [t]);
|
|
return n
|
|
}, d.scrollTop = function (t) {
|
|
return t && "number" == typeof t.scrollTop ? t.scrollTop : e.pageYOffset || 0
|
|
}, d.scrollLeft = function (t) {
|
|
return t && "number" == typeof t.scrollLeft ? t.scrollLeft : e.pageXOffset || 0
|
|
}, d.width = function (e, t, n) {
|
|
return o("width", e, t, n)
|
|
}, d.height = function (e, t, n) {
|
|
return o("height", e, t, n)
|
|
}, d.offset = function (e, t) {
|
|
var n = {
|
|
top: 0,
|
|
left: 0
|
|
};
|
|
if (e && e.getBoundingClientRect) {
|
|
var r = e.getBoundingClientRect();
|
|
n.top = r.top, n.left = r.left, t || (n.top += d.scrollTop(), n.left += d.scrollLeft())
|
|
}
|
|
return n
|
|
}, n.addClass = function (e, t) {
|
|
t && (e.classList ? e.classList.add(t) : e.className += " " + t)
|
|
}, n.removeClass = function (e, t) {
|
|
t && (e.classList ? e.classList.remove(t) : e.className = e.className.replace(RegExp("(^|\\b)" + t.split(" ").join("|") + "(\\b|$)", "gi"), " "))
|
|
}, n.css = function (e, t) {
|
|
if (f.String(t)) return i(e)[s(t)];
|
|
if (f.Array(t)) {
|
|
var n = {},
|
|
r = i(e);
|
|
return t.forEach(function (e) {
|
|
n[e] = r[s(e)]
|
|
}), n
|
|
}
|
|
for (var o in t) {
|
|
var a = t[o];
|
|
a == parseFloat(a) && (a += "px"), e.style[s(o)] = a
|
|
}
|
|
}, n
|
|
}(window || {});
|
|
return e
|
|
}); |