mirror of
https://github.com/VTECRM/vtenext.git
synced 2026-02-26 16:18:47 +00:00
55 lines
1.8 KiB
JavaScript
55 lines
1.8 KiB
JavaScript
/*************************************
|
|
* SPDX-FileCopyrightText: 2009-2020 Vtenext S.r.l. <info@vtenext.com>
|
|
* SPDX-License-Identifier: AGPL-3.0-only
|
|
************************************/
|
|
(function($) {
|
|
|
|
var scrollFireEventsHandled = false;
|
|
|
|
// Input: Array of JSON objects {selector, offset, callback}
|
|
Materialize.scrollFire = function(options) {
|
|
var onScroll = function() {
|
|
var windowScroll = window.pageYOffset + window.innerHeight;
|
|
|
|
for (var i = 0 ; i < options.length; i++) {
|
|
// Get options from each line
|
|
var value = options[i];
|
|
var selector = value.selector,
|
|
offset = value.offset,
|
|
callback = value.callback;
|
|
|
|
var currentElement = document.querySelector(selector);
|
|
if ( currentElement !== null) {
|
|
var elementOffset = currentElement.getBoundingClientRect().top + window.pageYOffset;
|
|
|
|
if (windowScroll > (elementOffset + offset)) {
|
|
if (value.done !== true) {
|
|
if (typeof(callback) === 'function') {
|
|
callback.call(this, currentElement);
|
|
} else if (typeof(callback) === 'string') {
|
|
var callbackFunc = new Function(callback);
|
|
callbackFunc(currentElement);
|
|
}
|
|
value.done = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
|
|
var throttledScroll = Materialize.throttle(function() {
|
|
onScroll();
|
|
}, options.throttle || 100);
|
|
|
|
if (!scrollFireEventsHandled) {
|
|
window.addEventListener("scroll", throttledScroll);
|
|
window.addEventListener("resize", throttledScroll);
|
|
scrollFireEventsHandled = true;
|
|
}
|
|
|
|
// perform a scan once, after current execution context, and after dom is ready
|
|
setTimeout(throttledScroll, 0);
|
|
};
|
|
|
|
})(jQuery); |