architecture-mechanism.gith.../assets/js/jquery.paroller.min.js
2023-09-19 15:38:21 -04:00

145 lines
5.1 KiB
JavaScript
Executable File

'use strict';
/**
* jQuery plugin paroller.js v1.4.6
* https://github.com/tgomilar/paroller.js
* preview: https://tgomilar.github.io/paroller/
**/
(function(a) {
'use strict';
'function' == typeof define && define.amd ? define('parollerjs', ['jquery'], a) : 'object' == typeof module && 'object' == typeof module.exports ? module.exports = a(require('jquery')) : a(jQuery)
})(function(a) {
'use strict';
var b = Math.round;
let c = !1,
d = function() {
c = !1
},
e = {
bgVertical: function(a, b) {
return a.css({
"background-position": 'center ' + -b + 'px'
})
},
bgHorizontal: function(a, b) {
return a.css({
"background-position": -b + 'px center'
})
},
vertical: function(a, b, c, d) {
return 'none' === d && (d = ''), a.css({
"-webkit-transform": 'translateY(' + b + 'px)' + d,
"-moz-transform": 'translateY(' + b + 'px)' + d,
transform: 'translate(0,' + b + 'px)' + d,
transition: c,
"will-change": 'transform'
})
},
horizontal: function(a, b, c, d) {
return 'none' === d && (d = ''), a.css({
"-webkit-transform": 'translateX(' + b + 'px)' + d,
"-moz-transform": 'translateX(' + b + 'px)' + d,
transform: 'translate(' + b + 'px, 0)' + d,
transition: c,
"will-change": 'transform'
})
}
},
f = {
factor: function(a, b, c) {
let d = a.data('paroller-factor'),
e = d ? d : c.factor;
if (576 > b) {
let b = a.data('paroller-factor-xs'),
d = b ? b : c.factorXs;
return d ? d : e
}
if (768 >= b) {
let b = a.data('paroller-factor-sm'),
d = b ? b : c.factorSm;
return d ? d : e
}
if (1024 >= b) {
let b = a.data('paroller-factor-md'),
d = b ? b : c.factorMd;
return d ? d : e
}
if (1200 >= b) {
let b = a.data('paroller-factor-lg'),
d = b ? b : c.factorLg;
return d ? d : e
}
if (1920 >= b) {
let b = a.data('paroller-factor-xl'),
d = b ? b : c.factorXl;
return d ? d : e
}
return e
},
bgOffset: function(a, c) {
return b(a * c)
},
transform: function(a, c, d, e) {
return b((a - d / 2 + e) * c)
}
},
g = {
background: function(a) {
return a.css({
"background-position": 'unset'
})
},
foreground: function(a) {
return a.css({
transform: 'unset',
transition: 'unset'
})
}
};
a.fn.paroller = function(h) {
const i = a(window).height(),
j = a(document).height(); // default options
return h = a.extend({
factor: 0, // - to +
factorXs: 0, // - to +
factorSm: 0, // - to +
factorMd: 0, // - to +
factorLg: 0, // - to +
factorXl: 0, // - to +
transition: 'transform .1s ease', // CSS transition
type: 'background', // foreground
direction: 'vertical' // horizontal
}, h), this.each(function() {
const k = a(this);
let l = k.outerHeight(),
m = a(window).width(),
n = k.offset().top,
o = 0,
p = function(a, b) { // console.log(`offset ${scrollOffset} => ${transform - scrollOffset}`)
return a || (o = b), b - o
};
const q = k.data('paroller-type'),
r = k.data('paroller-direction'),
s = k.data('paroller-transition'),
t = k.css('transform'),
u = s ? s : h.transition,
v = q ? q : h.type,
w = r ? r : h.direction;
let x = 0,
y = f.bgOffset(n, x),
z = f.transform(n, x, i, l);
'background' === v ? 'vertical' === w ? e.bgVertical(k, y) : 'horizontal' === w && e.bgHorizontal(k, y) : 'foreground' === v && ('vertical' === w ? e.vertical(k, z, u, t) : 'horizontal' === w && e.horizontal(k, z, u, t)), a(window).on('resize', function() {
let o = a(this).scrollTop();
m = a(window).width(), n = k.offset().top, l = k.outerHeight(), x = f.factor(k, m, h), y = b(n * x);
let q = p(a(document).scrollTop(), b((n - i / 2 + l) * x));
c || (window.requestAnimationFrame(d), c = !0), 'background' === v ? (g.background(k), 'vertical' === w ? e.bgVertical(k, y) : 'horizontal' === w && e.bgHorizontal(k, y)) : 'foreground' === v && o <= j && (g.foreground(k), 'vertical' === w ? e.vertical(k, q, u) : 'horizontal' === w && e.horizontal(k, q, u))
}), a(window).on('load scroll', function() {
let g = a(this).scrollTop(),
o = a(document).scrollTop();
x = f.factor(k, m, h);
let q = p(o, b((n - i / 2 + l - g) * x));
c || (window.requestAnimationFrame(d), c = !0), 'background' === v ? 'vertical' === w ? e.bgVertical(k, y) : 'horizontal' === w && e.bgHorizontal(k, y) : 'foreground' === v && g <= j && ('vertical' === w ? e.vertical(k, q, u, t) : 'horizontal' === w && e.horizontal(k, q, u, t))
})
})
}
});