Files
website/assets/js/jquery.scrollex.min.js
T
2022-07-07 11:54:43 +02:00

118 lines
3.7 KiB
JavaScript

/* jquery.scrollex v0.2.1 | (c) @ajlkn | github.com/ajlkn/jquery.scrollex | MIT licensed */
!(function (t) {
function e(t, e, n) {
return (
'string' == typeof t &&
('%' == t.slice(-1)
? (t = (parseInt(t.substring(0, t.length - 1)) / 100) * e)
: 'vh' == t.slice(-2)
? (t = (parseInt(t.substring(0, t.length - 2)) / 100) * n)
: 'px' == t.slice(-2) && (t = parseInt(t.substring(0, t.length - 2)))),
t
)
}
var n = t(window),
i = 1,
o = {}
n
.on('scroll', function () {
var e = n.scrollTop()
t.map(o, function (t) {
window.clearTimeout(t.timeoutId),
(t.timeoutId = window.setTimeout(function () {
t.handler(e)
}, t.options.delay))
})
})
.on('load', function () {
n.trigger('scroll')
}),
(jQuery.fn.scrollex = function (l) {
var s = t(this)
if (0 == this.length) return s
if (this.length > 1) {
for (var r = 0; r < this.length; r++) t(this[r]).scrollex(l)
return s
}
if (s.data('_scrollexId')) return s
var a, u, h, c, p
switch (
((a = i++),
(u = jQuery.extend({ top: 0, bottom: 0, delay: 0, mode: 'default', enter: null, leave: null, initialize: null, terminate: null, scroll: null }, l)),
u.mode)
) {
case 'top':
h = function (t, e, n, i, o) {
return t >= i && o >= t
}
break
case 'bottom':
h = function (t, e, n, i, o) {
return n >= i && o >= n
}
break
case 'middle':
h = function (t, e, n, i, o) {
return e >= i && o >= e
}
break
case 'top-only':
h = function (t, e, n, i, o) {
return i >= t && n >= i
}
break
case 'bottom-only':
h = function (t, e, n, i, o) {
return n >= o && o >= t
}
break
default:
case 'default':
h = function (t, e, n, i, o) {
return n >= i && o >= t
}
}
return (
(c = function (t) {
var i,
o,
l,
s,
r,
a,
u = this.state,
h = !1,
c = this.$element.offset()
;(i = n.height()),
(o = t + i / 2),
(l = t + i),
(s = this.$element.outerHeight()),
(r = c.top + e(this.options.top, s, i)),
(a = c.top + s - e(this.options.bottom, s, i)),
(h = this.test(t, o, l, r, a)),
h != u &&
((this.state = h),
h ? this.options.enter && this.options.enter.apply(this.element) : this.options.leave && this.options.leave.apply(this.element)),
this.options.scroll && this.options.scroll.apply(this.element, [(o - r) / (a - r)])
}),
(p = { id: a, options: u, test: h, handler: c, state: null, element: this, $element: s, timeoutId: null }),
(o[a] = p),
s.data('_scrollexId', p.id),
p.options.initialize && p.options.initialize.apply(this),
s
)
}),
(jQuery.fn.unscrollex = function () {
var e = t(this)
if (0 == this.length) return e
if (this.length > 1) {
for (var n = 0; n < this.length; n++) t(this[n]).unscrollex()
return e
}
var i, l
return (i = e.data('_scrollexId'))
? ((l = o[i]), window.clearTimeout(l.timeoutId), delete o[i], e.removeData('_scrollexId'), l.options.terminate && l.options.terminate.apply(this), e)
: e
})
})(jQuery)