UNPKG

1.61 kBJavaScriptView Raw
1(function($) {
2
3 var scrollFireEventsHandled = false;
4
5 // Input: Array of JSON objects {selector, offset, callback}
6 Materialize.scrollFire = function(options) {
7 var onScroll = function() {
8 var windowScroll = window.pageYOffset + window.innerHeight;
9
10 for (var i = 0 ; i < options.length; i++) {
11 // Get options from each line
12 var value = options[i];
13 var selector = value.selector,
14 offset = value.offset,
15 callback = value.callback;
16
17 var currentElement = document.querySelector(selector);
18 if ( currentElement !== null) {
19 var elementOffset = currentElement.getBoundingClientRect().top + window.pageYOffset;
20
21 if (windowScroll > (elementOffset + offset)) {
22 if (value.done !== true) {
23 if (typeof(callback) === 'function') {
24 callback.call(this, currentElement);
25 } else if (typeof(callback) === 'string') {
26 var callbackFunc = new Function(callback);
27 callbackFunc(currentElement);
28 }
29 value.done = true;
30 }
31 }
32 }
33 }
34 };
35
36
37 var throttledScroll = Materialize.throttle(function() {
38 onScroll();
39 }, options.throttle || 100);
40
41 if (!scrollFireEventsHandled) {
42 window.addEventListener("scroll", throttledScroll);
43 window.addEventListener("resize", throttledScroll);
44 scrollFireEventsHandled = true;
45 }
46
47 // perform a scan once, after current execution context, and after dom is ready
48 setTimeout(throttledScroll, 0);
49 };
50
51})(jQuery);