materialize-css
Version:
Builds Materialize distribution packages
52 lines (41 loc) • 1.61 kB
JavaScript
(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);