| 'use strict'; | ||
| /** | ||
| * Attaches the scroll event handler | ||
| * | ||
| * @return {void} | ||
| */ | ||
| function attach() { | ||
| var container = this.options.container; | ||
| if (container instanceof HTMLElement) { | ||
| var style = window.getComputedStyle(container); | ||
| if (style.position === 'static') { | ||
| container.style.position = 'relative'; | ||
| } | ||
| } | ||
| container.addEventListener('scroll', this._scroll); | ||
| window.addEventListener('resize', this._scroll); | ||
| this._scroll(); | ||
| this.attached = true; | ||
| } | ||
| /** | ||
| * Checks an element's position in respect to the viewport | ||
| * and determines wether it's inside the viewport. | ||
| * | ||
| * @param {node} element The DOM node you want to check | ||
| * @return {boolean} A boolean value that indicates wether is on or off the viewport. | ||
| */ | ||
| function inViewport(el) { | ||
| var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { | ||
| tolerance: 0 | ||
| }; | ||
| if (!el) { | ||
| throw new Error('You should specify the element you want to test'); | ||
| } | ||
| if (typeof el === 'string') { | ||
| el = document.querySelector(el); | ||
| } | ||
| var elRect = el.getBoundingClientRect(); | ||
| return (// Check bottom boundary | ||
| elRect.bottom - options.tolerance > 0 && // Check right boundary | ||
| elRect.right - options.tolerance > 0 && // Check left boundary | ||
| elRect.left + options.tolerance < (window.innerWidth || document.documentElement.clientWidth) && // Check top boundary | ||
| elRect.top + options.tolerance < (window.innerHeight || document.documentElement.clientHeight) | ||
| ); | ||
| } | ||
| /** | ||
| * Checks an element's position in respect to a HTMLElement | ||
| * and determines wether it's within its boundaries. | ||
| * | ||
| * @param {node} element The DOM node you want to check | ||
| * @return {boolean} A boolean value that indicates wether is on or off the container. | ||
| */ | ||
| function inContainer(el) { | ||
| var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { | ||
| tolerance: 0, | ||
| container: '' | ||
| }; | ||
| if (!el) { | ||
| throw new Error('You should specify the element you want to test'); | ||
| } | ||
| if (typeof el === 'string') { | ||
| el = document.querySelector(el); | ||
| } | ||
| if (typeof options === 'string') { | ||
| options = { | ||
| tolerance: 0, | ||
| container: document.querySelector(options) | ||
| }; | ||
| } | ||
| if (typeof options.container === 'string') { | ||
| options.container = document.querySelector(options.container); | ||
| } | ||
| if (options instanceof HTMLElement) { | ||
| options = { | ||
| tolerance: 0, | ||
| container: options | ||
| }; | ||
| } | ||
| if (!options.container) { | ||
| throw new Error('You should specify a container element'); | ||
| } | ||
| var containerRect = options.container.getBoundingClientRect(); | ||
| return (// // Check bottom boundary | ||
| el.offsetTop + el.clientHeight - options.tolerance > options.container.scrollTop && // Check right boundary | ||
| el.offsetLeft + el.clientWidth - options.tolerance > options.container.scrollLeft && // Check left boundary | ||
| el.offsetLeft + options.tolerance < containerRect.width + options.container.scrollLeft && // // Check top boundary | ||
| el.offsetTop + options.tolerance < containerRect.height + options.container.scrollTop | ||
| ); | ||
| } | ||
| /* istanbul ignore next */ | ||
| function eventHandler() { | ||
| var trackedElements = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; | ||
| var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { | ||
| tolerance: 0 | ||
| }; | ||
| var selectors = Object.keys(trackedElements); | ||
| var testVisibility; | ||
| if (!selectors.length) return; | ||
| if (options.container === window) { | ||
| testVisibility = inViewport; | ||
| } else { | ||
| testVisibility = inContainer; | ||
| } | ||
| selectors.forEach(function (selector) { | ||
| trackedElements[selector].nodes.forEach(function (item) { | ||
| if (testVisibility(item.node, options)) { | ||
| item.wasVisible = item.isVisible; | ||
| item.isVisible = true; | ||
| } else { | ||
| item.wasVisible = item.isVisible; | ||
| item.isVisible = false; | ||
| } | ||
| if (item.isVisible === true && item.wasVisible === false) { | ||
| if (!trackedElements[selector].enter) return; | ||
| Object.keys(trackedElements[selector].enter).forEach(function (callback) { | ||
| if (typeof trackedElements[selector].enter[callback] === 'function') { | ||
| trackedElements[selector].enter[callback](item.node, 'enter'); | ||
| } | ||
| }); | ||
| } | ||
| if (item.isVisible === false && item.wasVisible === true) { | ||
| if (!trackedElements[selector].leave) return; | ||
| Object.keys(trackedElements[selector].leave).forEach(function (callback) { | ||
| if (typeof trackedElements[selector].leave[callback] === 'function') { | ||
| trackedElements[selector].leave[callback](item.node, 'leave'); | ||
| } | ||
| }); | ||
| } | ||
| }); | ||
| }); | ||
| } | ||
| /** | ||
| * Debounces the scroll event to avoid performance issues | ||
| * | ||
| * @return {void} | ||
| */ | ||
| function debouncedScroll() { | ||
| var _this = this; | ||
| var timeout; | ||
| return function () { | ||
| clearTimeout(timeout); | ||
| timeout = setTimeout(function () { | ||
| eventHandler(_this.trackedElements, _this.options); | ||
| }, _this.options.debounce); | ||
| }; | ||
| } | ||
| /** | ||
| * Removes the scroll event handler | ||
| * | ||
| * @return {void} | ||
| */ | ||
| function destroy() { | ||
| this.options.container.removeEventListener('scroll', this._scroll); | ||
| window.removeEventListener('resize', this._scroll); | ||
| this.attached = false; | ||
| } | ||
| /** | ||
| * Stops tracking elements matching a CSS selector. If a selector has no | ||
| * callbacks it gets removed. | ||
| * | ||
| * @param {string} event The event you want to stop tracking (enter or leave) | ||
| * @param {string} selector The CSS selector you want to stop tracking | ||
| * @return {void} | ||
| */ | ||
| function off(event, selector, handler) { | ||
| var enterCallbacks = Object.keys(this.trackedElements[selector].enter || {}); | ||
| var leaveCallbacks = Object.keys(this.trackedElements[selector].leave || {}); | ||
| if ({}.hasOwnProperty.call(this.trackedElements, selector)) { | ||
| if (handler) { | ||
| if (this.trackedElements[selector][event]) { | ||
| var callbackName = typeof handler === 'function' ? handler.name : handler; | ||
| delete this.trackedElements[selector][event][callbackName]; | ||
| } | ||
| } else { | ||
| delete this.trackedElements[selector][event]; | ||
| } | ||
| } | ||
| if (!enterCallbacks.length && !leaveCallbacks.length) { | ||
| delete this.trackedElements[selector]; | ||
| } | ||
| } | ||
| /** | ||
| * Starts tracking elements matching a CSS selector | ||
| * | ||
| * @param {string} event The event you want to track (enter or leave) | ||
| * @param {string} selector The element you want to track | ||
| * @param {function} callback The callback function to handle the event | ||
| * @return {void} | ||
| */ | ||
| function on(event, selector, callback) { | ||
| var allowed = ['enter', 'leave']; | ||
| if (!event) throw new Error('No event given. Choose either enter or leave'); | ||
| if (!selector) throw new Error('No selector to track'); | ||
| if (allowed.indexOf(event) < 0) throw new Error("".concat(event, " event is not supported")); | ||
| if (!{}.hasOwnProperty.call(this.trackedElements, selector)) { | ||
| this.trackedElements[selector] = {}; | ||
| } | ||
| this.trackedElements[selector].nodes = []; | ||
| for (var i = 0, elems = document.querySelectorAll(selector); i < elems.length; i++) { | ||
| var item = { | ||
| isVisible: false, | ||
| wasVisible: false, | ||
| node: elems[i] | ||
| }; | ||
| this.trackedElements[selector].nodes.push(item); | ||
| } | ||
| if (typeof callback === 'function') { | ||
| if (!this.trackedElements[selector][event]) { | ||
| this.trackedElements[selector][event] = {}; | ||
| } | ||
| this.trackedElements[selector][event][callback.name || 'anonymous'] = callback; | ||
| } | ||
| } | ||
| /** | ||
| * Observes DOM mutations and runs a callback function when | ||
| * detecting one. | ||
| * | ||
| * @param {node} obj The DOM node you want to observe | ||
| * @param {function} callback The callback function you want to call | ||
| * @return {void} | ||
| */ | ||
| function observeDOM(obj, callback) { | ||
| var MutationObserver = window.MutationObserver || window.WebKitMutationObserver; | ||
| /* istanbul ignore else */ | ||
| if (MutationObserver) { | ||
| var obs = new MutationObserver(callback); | ||
| obs.observe(obj, { | ||
| childList: true, | ||
| subtree: true | ||
| }); | ||
| } else { | ||
| obj.addEventListener('DOMNodeInserted', callback, false); | ||
| obj.addEventListener('DOMNodeRemoved', callback, false); | ||
| } | ||
| } | ||
| // Methods | ||
| /** | ||
| * Detects wether DOM nodes enter or leave the viewport | ||
| * | ||
| * @constructor | ||
| * @param {object} options The configuration object | ||
| */ | ||
| function OnScreen() { | ||
| var _this = this; | ||
| var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { | ||
| tolerance: 0, | ||
| debounce: 100, | ||
| container: window | ||
| }; | ||
| this.options = {}; | ||
| this.trackedElements = {}; | ||
| Object.defineProperties(this.options, { | ||
| container: { | ||
| configurable: false, | ||
| enumerable: false, | ||
| get: function get() { | ||
| var container; | ||
| if (typeof options.container === 'string') { | ||
| container = document.querySelector(options.container); | ||
| } else if (options.container instanceof HTMLElement) { | ||
| container = options.container; | ||
| } | ||
| return container || window; | ||
| }, | ||
| set: function set(value) { | ||
| options.container = value; | ||
| } | ||
| }, | ||
| debounce: { | ||
| get: function get() { | ||
| return parseInt(options.debounce, 10) || 100; | ||
| }, | ||
| set: function set(value) { | ||
| options.debounce = value; | ||
| } | ||
| }, | ||
| tolerance: { | ||
| get: function get() { | ||
| return parseInt(options.tolerance, 10) || 0; | ||
| }, | ||
| set: function set(value) { | ||
| options.tolerance = value; | ||
| } | ||
| } | ||
| }); | ||
| Object.defineProperty(this, '_scroll', { | ||
| enumerable: false, | ||
| configurable: false, | ||
| writable: false, | ||
| value: this._debouncedScroll.call(this) | ||
| }); | ||
| observeDOM(document.querySelector('body'), function () { | ||
| Object.keys(_this.trackedElements).forEach(function (element) { | ||
| _this.on('enter', element); | ||
| _this.on('leave', element); | ||
| }); | ||
| }); | ||
| this.attach(); | ||
| } | ||
| Object.defineProperties(OnScreen.prototype, { | ||
| _debouncedScroll: { | ||
| configurable: false, | ||
| writable: false, | ||
| enumerable: false, | ||
| value: debouncedScroll | ||
| }, | ||
| attach: { | ||
| configurable: false, | ||
| writable: false, | ||
| enumerable: false, | ||
| value: attach | ||
| }, | ||
| destroy: { | ||
| configurable: false, | ||
| writable: false, | ||
| enumerable: false, | ||
| value: destroy | ||
| }, | ||
| off: { | ||
| configurable: false, | ||
| writable: false, | ||
| enumerable: false, | ||
| value: off | ||
| }, | ||
| on: { | ||
| configurable: false, | ||
| writable: false, | ||
| enumerable: false, | ||
| value: on | ||
| } | ||
| }); | ||
| OnScreen.check = inViewport; | ||
| module.exports = OnScreen; |
| /** | ||
| * Attaches the scroll event handler | ||
| * | ||
| * @return {void} | ||
| */ | ||
| function attach() { | ||
| var container = this.options.container; | ||
| if (container instanceof HTMLElement) { | ||
| var style = window.getComputedStyle(container); | ||
| if (style.position === 'static') { | ||
| container.style.position = 'relative'; | ||
| } | ||
| } | ||
| container.addEventListener('scroll', this._scroll); | ||
| window.addEventListener('resize', this._scroll); | ||
| this._scroll(); | ||
| this.attached = true; | ||
| } | ||
| /** | ||
| * Checks an element's position in respect to the viewport | ||
| * and determines wether it's inside the viewport. | ||
| * | ||
| * @param {node} element The DOM node you want to check | ||
| * @return {boolean} A boolean value that indicates wether is on or off the viewport. | ||
| */ | ||
| function inViewport(el) { | ||
| var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { | ||
| tolerance: 0 | ||
| }; | ||
| if (!el) { | ||
| throw new Error('You should specify the element you want to test'); | ||
| } | ||
| if (typeof el === 'string') { | ||
| el = document.querySelector(el); | ||
| } | ||
| var elRect = el.getBoundingClientRect(); | ||
| return (// Check bottom boundary | ||
| elRect.bottom - options.tolerance > 0 && // Check right boundary | ||
| elRect.right - options.tolerance > 0 && // Check left boundary | ||
| elRect.left + options.tolerance < (window.innerWidth || document.documentElement.clientWidth) && // Check top boundary | ||
| elRect.top + options.tolerance < (window.innerHeight || document.documentElement.clientHeight) | ||
| ); | ||
| } | ||
| /** | ||
| * Checks an element's position in respect to a HTMLElement | ||
| * and determines wether it's within its boundaries. | ||
| * | ||
| * @param {node} element The DOM node you want to check | ||
| * @return {boolean} A boolean value that indicates wether is on or off the container. | ||
| */ | ||
| function inContainer(el) { | ||
| var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { | ||
| tolerance: 0, | ||
| container: '' | ||
| }; | ||
| if (!el) { | ||
| throw new Error('You should specify the element you want to test'); | ||
| } | ||
| if (typeof el === 'string') { | ||
| el = document.querySelector(el); | ||
| } | ||
| if (typeof options === 'string') { | ||
| options = { | ||
| tolerance: 0, | ||
| container: document.querySelector(options) | ||
| }; | ||
| } | ||
| if (typeof options.container === 'string') { | ||
| options.container = document.querySelector(options.container); | ||
| } | ||
| if (options instanceof HTMLElement) { | ||
| options = { | ||
| tolerance: 0, | ||
| container: options | ||
| }; | ||
| } | ||
| if (!options.container) { | ||
| throw new Error('You should specify a container element'); | ||
| } | ||
| var containerRect = options.container.getBoundingClientRect(); | ||
| return (// // Check bottom boundary | ||
| el.offsetTop + el.clientHeight - options.tolerance > options.container.scrollTop && // Check right boundary | ||
| el.offsetLeft + el.clientWidth - options.tolerance > options.container.scrollLeft && // Check left boundary | ||
| el.offsetLeft + options.tolerance < containerRect.width + options.container.scrollLeft && // // Check top boundary | ||
| el.offsetTop + options.tolerance < containerRect.height + options.container.scrollTop | ||
| ); | ||
| } | ||
| /* istanbul ignore next */ | ||
| function eventHandler() { | ||
| var trackedElements = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; | ||
| var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { | ||
| tolerance: 0 | ||
| }; | ||
| var selectors = Object.keys(trackedElements); | ||
| var testVisibility; | ||
| if (!selectors.length) return; | ||
| if (options.container === window) { | ||
| testVisibility = inViewport; | ||
| } else { | ||
| testVisibility = inContainer; | ||
| } | ||
| selectors.forEach(function (selector) { | ||
| trackedElements[selector].nodes.forEach(function (item) { | ||
| if (testVisibility(item.node, options)) { | ||
| item.wasVisible = item.isVisible; | ||
| item.isVisible = true; | ||
| } else { | ||
| item.wasVisible = item.isVisible; | ||
| item.isVisible = false; | ||
| } | ||
| if (item.isVisible === true && item.wasVisible === false) { | ||
| if (!trackedElements[selector].enter) return; | ||
| Object.keys(trackedElements[selector].enter).forEach(function (callback) { | ||
| if (typeof trackedElements[selector].enter[callback] === 'function') { | ||
| trackedElements[selector].enter[callback](item.node, 'enter'); | ||
| } | ||
| }); | ||
| } | ||
| if (item.isVisible === false && item.wasVisible === true) { | ||
| if (!trackedElements[selector].leave) return; | ||
| Object.keys(trackedElements[selector].leave).forEach(function (callback) { | ||
| if (typeof trackedElements[selector].leave[callback] === 'function') { | ||
| trackedElements[selector].leave[callback](item.node, 'leave'); | ||
| } | ||
| }); | ||
| } | ||
| }); | ||
| }); | ||
| } | ||
| /** | ||
| * Debounces the scroll event to avoid performance issues | ||
| * | ||
| * @return {void} | ||
| */ | ||
| function debouncedScroll() { | ||
| var _this = this; | ||
| var timeout; | ||
| return function () { | ||
| clearTimeout(timeout); | ||
| timeout = setTimeout(function () { | ||
| eventHandler(_this.trackedElements, _this.options); | ||
| }, _this.options.debounce); | ||
| }; | ||
| } | ||
| /** | ||
| * Removes the scroll event handler | ||
| * | ||
| * @return {void} | ||
| */ | ||
| function destroy() { | ||
| this.options.container.removeEventListener('scroll', this._scroll); | ||
| window.removeEventListener('resize', this._scroll); | ||
| this.attached = false; | ||
| } | ||
| /** | ||
| * Stops tracking elements matching a CSS selector. If a selector has no | ||
| * callbacks it gets removed. | ||
| * | ||
| * @param {string} event The event you want to stop tracking (enter or leave) | ||
| * @param {string} selector The CSS selector you want to stop tracking | ||
| * @return {void} | ||
| */ | ||
| function off(event, selector, handler) { | ||
| var enterCallbacks = Object.keys(this.trackedElements[selector].enter || {}); | ||
| var leaveCallbacks = Object.keys(this.trackedElements[selector].leave || {}); | ||
| if ({}.hasOwnProperty.call(this.trackedElements, selector)) { | ||
| if (handler) { | ||
| if (this.trackedElements[selector][event]) { | ||
| var callbackName = typeof handler === 'function' ? handler.name : handler; | ||
| delete this.trackedElements[selector][event][callbackName]; | ||
| } | ||
| } else { | ||
| delete this.trackedElements[selector][event]; | ||
| } | ||
| } | ||
| if (!enterCallbacks.length && !leaveCallbacks.length) { | ||
| delete this.trackedElements[selector]; | ||
| } | ||
| } | ||
| /** | ||
| * Starts tracking elements matching a CSS selector | ||
| * | ||
| * @param {string} event The event you want to track (enter or leave) | ||
| * @param {string} selector The element you want to track | ||
| * @param {function} callback The callback function to handle the event | ||
| * @return {void} | ||
| */ | ||
| function on(event, selector, callback) { | ||
| var allowed = ['enter', 'leave']; | ||
| if (!event) throw new Error('No event given. Choose either enter or leave'); | ||
| if (!selector) throw new Error('No selector to track'); | ||
| if (allowed.indexOf(event) < 0) throw new Error("".concat(event, " event is not supported")); | ||
| if (!{}.hasOwnProperty.call(this.trackedElements, selector)) { | ||
| this.trackedElements[selector] = {}; | ||
| } | ||
| this.trackedElements[selector].nodes = []; | ||
| for (var i = 0, elems = document.querySelectorAll(selector); i < elems.length; i++) { | ||
| var item = { | ||
| isVisible: false, | ||
| wasVisible: false, | ||
| node: elems[i] | ||
| }; | ||
| this.trackedElements[selector].nodes.push(item); | ||
| } | ||
| if (typeof callback === 'function') { | ||
| if (!this.trackedElements[selector][event]) { | ||
| this.trackedElements[selector][event] = {}; | ||
| } | ||
| this.trackedElements[selector][event][callback.name || 'anonymous'] = callback; | ||
| } | ||
| } | ||
| /** | ||
| * Observes DOM mutations and runs a callback function when | ||
| * detecting one. | ||
| * | ||
| * @param {node} obj The DOM node you want to observe | ||
| * @param {function} callback The callback function you want to call | ||
| * @return {void} | ||
| */ | ||
| function observeDOM(obj, callback) { | ||
| var MutationObserver = window.MutationObserver || window.WebKitMutationObserver; | ||
| /* istanbul ignore else */ | ||
| if (MutationObserver) { | ||
| var obs = new MutationObserver(callback); | ||
| obs.observe(obj, { | ||
| childList: true, | ||
| subtree: true | ||
| }); | ||
| } else { | ||
| obj.addEventListener('DOMNodeInserted', callback, false); | ||
| obj.addEventListener('DOMNodeRemoved', callback, false); | ||
| } | ||
| } | ||
| // Methods | ||
| /** | ||
| * Detects wether DOM nodes enter or leave the viewport | ||
| * | ||
| * @constructor | ||
| * @param {object} options The configuration object | ||
| */ | ||
| function OnScreen() { | ||
| var _this = this; | ||
| var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { | ||
| tolerance: 0, | ||
| debounce: 100, | ||
| container: window | ||
| }; | ||
| this.options = {}; | ||
| this.trackedElements = {}; | ||
| Object.defineProperties(this.options, { | ||
| container: { | ||
| configurable: false, | ||
| enumerable: false, | ||
| get: function get() { | ||
| var container; | ||
| if (typeof options.container === 'string') { | ||
| container = document.querySelector(options.container); | ||
| } else if (options.container instanceof HTMLElement) { | ||
| container = options.container; | ||
| } | ||
| return container || window; | ||
| }, | ||
| set: function set(value) { | ||
| options.container = value; | ||
| } | ||
| }, | ||
| debounce: { | ||
| get: function get() { | ||
| return parseInt(options.debounce, 10) || 100; | ||
| }, | ||
| set: function set(value) { | ||
| options.debounce = value; | ||
| } | ||
| }, | ||
| tolerance: { | ||
| get: function get() { | ||
| return parseInt(options.tolerance, 10) || 0; | ||
| }, | ||
| set: function set(value) { | ||
| options.tolerance = value; | ||
| } | ||
| } | ||
| }); | ||
| Object.defineProperty(this, '_scroll', { | ||
| enumerable: false, | ||
| configurable: false, | ||
| writable: false, | ||
| value: this._debouncedScroll.call(this) | ||
| }); | ||
| observeDOM(document.querySelector('body'), function () { | ||
| Object.keys(_this.trackedElements).forEach(function (element) { | ||
| _this.on('enter', element); | ||
| _this.on('leave', element); | ||
| }); | ||
| }); | ||
| this.attach(); | ||
| } | ||
| Object.defineProperties(OnScreen.prototype, { | ||
| _debouncedScroll: { | ||
| configurable: false, | ||
| writable: false, | ||
| enumerable: false, | ||
| value: debouncedScroll | ||
| }, | ||
| attach: { | ||
| configurable: false, | ||
| writable: false, | ||
| enumerable: false, | ||
| value: attach | ||
| }, | ||
| destroy: { | ||
| configurable: false, | ||
| writable: false, | ||
| enumerable: false, | ||
| value: destroy | ||
| }, | ||
| off: { | ||
| configurable: false, | ||
| writable: false, | ||
| enumerable: false, | ||
| value: off | ||
| }, | ||
| on: { | ||
| configurable: false, | ||
| writable: false, | ||
| enumerable: false, | ||
| value: on | ||
| } | ||
| }); | ||
| OnScreen.check = inViewport; | ||
| export default OnScreen; |
| {"version":3,"sources":["dist/on-screen.umd.js"],"names":["global","factory","exports","module","define","amd","self","OnScreen","this","inViewport","el","options","arguments","length","undefined","tolerance","Error","document","querySelector","elRect","getBoundingClientRect","bottom","right","left","window","innerWidth","documentElement","clientWidth","top","innerHeight","clientHeight","inContainer","container","HTMLElement","containerRect","offsetTop","scrollTop","offsetLeft","scrollLeft","width","height","_this","debounce","trackedElements","Object","defineProperties","configurable","enumerable","get","set","value","parseInt","defineProperty","writable","_debouncedScroll","call","obj","callback","MutationObserver","WebKitMutationObserver","observe","childList","subtree","addEventListener","observeDOM","keys","forEach","element","on","attach","prototype","timeout","clearTimeout","setTimeout","testVisibility","selectors","selector","nodes","item","node","wasVisible","isVisible","enter","leave","eventHandler","getComputedStyle","position","style","_scroll","attached","destroy","removeEventListener","off","event","handler","enterCallbacks","leaveCallbacks","hasOwnProperty","callbackName","name","indexOf","concat","i","elems","querySelectorAll","push","check"],"mappings":"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","file":"dist/on-screen.umd.min.map"} |
@@ -17,4 +17,4 @@ /** | ||
| container.addEventListener('scroll', this._scroll); | ||
| window.addEventListener('resize', this._scroll); | ||
| container.addEventListener('scroll', this._scroll, { passive: true }); | ||
| window.addEventListener('resize', this._scroll, { passive: true }); | ||
| this._scroll(); | ||
@@ -21,0 +21,0 @@ this.attached = true; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":null,"sources":["../lib/methods/attach.js","../lib/helpers/in-viewport.js","../lib/helpers/in-container.js","../lib/helpers/scroll-handler.js","../lib/methods/debounced-scroll.js","../lib/methods/destroy.js","../lib/methods/off.js","../lib/methods/on.js","../lib/helpers/observe-dom.js","../lib/index.js"],"sourcesContent":["/**\n * Attaches the scroll event handler\n *\n * @return {void}\n */\nfunction attach() {\n const container = this.options.container;\n\n if (container instanceof HTMLElement) {\n const style = window.getComputedStyle(container);\n\n if (style.position === 'static') {\n container.style.position = 'relative';\n }\n }\n\n container.addEventListener('scroll', this._scroll);\n window.addEventListener('resize', this._scroll);\n this._scroll();\n this.attached = true;\n}\n\nexport default attach;\n","/**\n * Checks an element's position in respect to the viewport\n * and determines wether it's inside the viewport.\n *\n * @param {node} element The DOM node you want to check\n * @return {boolean} A boolean value that indicates wether is on or off the viewport.\n */\nfunction inViewport(el, options = { tolerance: 0 }) {\n if (!el) {\n throw new Error('You should specify the element you want to test');\n }\n\n if (typeof el === 'string') {\n el = document.querySelector(el);\n }\n\n const elRect = el.getBoundingClientRect();\n\n return (\n // Check bottom boundary\n elRect.bottom - options.tolerance > 0 &&\n\n // Check right boundary\n elRect.right - options.tolerance > 0 &&\n\n // Check left boundary\n elRect.left + options.tolerance < (window.innerWidth ||\n document.documentElement.clientWidth) &&\n\n // Check top boundary\n elRect.top + options.tolerance < (window.innerHeight ||\n document.documentElement.clientHeight)\n );\n}\n\nexport default inViewport;\n","/**\n * Checks an element's position in respect to a HTMLElement\n * and determines wether it's within its boundaries.\n *\n * @param {node} element The DOM node you want to check\n * @return {boolean} A boolean value that indicates wether is on or off the container.\n */\nfunction inContainer(el, options = { tolerance: 0, container: '' }) {\n if (!el) {\n throw new Error('You should specify the element you want to test');\n }\n\n if (typeof el === 'string') {\n el = document.querySelector(el);\n }\n if (typeof options === 'string') {\n options = {\n tolerance: 0,\n container: document.querySelector(options)\n };\n }\n if (typeof options.container === 'string') {\n options.container = document.querySelector(options.container);\n }\n if (options instanceof HTMLElement) {\n options = {\n tolerance: 0,\n container: options\n };\n }\n if (!options.container) {\n throw new Error('You should specify a container element');\n }\n\n const containerRect = options.container.getBoundingClientRect();\n\n return (\n // // Check bottom boundary\n (el.offsetTop + el.clientHeight) - options.tolerance >\n options.container.scrollTop &&\n\n // Check right boundary\n (el.offsetLeft + el.clientWidth) - options.tolerance >\n options.container.scrollLeft &&\n\n // Check left boundary\n el.offsetLeft + options.tolerance <\n containerRect.width + options.container.scrollLeft &&\n\n // // Check top boundary\n el.offsetTop + options.tolerance <\n containerRect.height + options.container.scrollTop\n );\n}\n\nexport default inContainer;\n","import inViewport from './in-viewport';\nimport inContainer from './in-container';\n\n// TODO: Refactor this so it can be easily tested\n/* istanbul ignore next */\nfunction eventHandler(trackedElements = {}, options = { tolerance: 0 }) {\n const selectors = Object.keys(trackedElements);\n let testVisibility;\n\n if (!selectors.length) return;\n\n if (options.container === window) {\n testVisibility = inViewport;\n } else {\n testVisibility = inContainer;\n }\n\n selectors.forEach((selector) => {\n trackedElements[selector].nodes.forEach((item) => {\n if (testVisibility(item.node, options)) {\n item.wasVisible = item.isVisible;\n item.isVisible = true;\n } else {\n item.wasVisible = item.isVisible;\n item.isVisible = false;\n }\n if (item.isVisible === true && item.wasVisible === false) {\n if (!trackedElements[selector].enter) return;\n\n Object.keys(trackedElements[selector].enter).forEach((callback) => {\n if (typeof trackedElements[selector].enter[callback] === 'function') {\n trackedElements[selector].enter[callback](item.node, 'enter');\n }\n });\n }\n if (item.isVisible === false && item.wasVisible === true) {\n if (!trackedElements[selector].leave) return;\n\n Object.keys(trackedElements[selector].leave).forEach((callback) => {\n if (typeof trackedElements[selector].leave[callback] === 'function') {\n trackedElements[selector].leave[callback](item.node, 'leave');\n }\n });\n }\n });\n });\n}\n\nexport default eventHandler;\n","import scrollHandler from '../helpers/scroll-handler';\n\n/**\n * Debounces the scroll event to avoid performance issues\n *\n * @return {void}\n */\nfunction debouncedScroll() {\n let timeout;\n\n return () => {\n clearTimeout(timeout);\n\n timeout = setTimeout(() => {\n scrollHandler(this.trackedElements, this.options);\n }, this.options.debounce);\n };\n}\n\nexport default debouncedScroll;\n","/**\n * Removes the scroll event handler\n *\n * @return {void}\n */\nfunction destroy() {\n this.options.container.removeEventListener('scroll', this._scroll);\n window.removeEventListener('resize', this._scroll);\n this.attached = false;\n}\n\nexport default destroy;\n","/**\n * Stops tracking elements matching a CSS selector. If a selector has no\n * callbacks it gets removed.\n *\n * @param {string} event The event you want to stop tracking (enter or leave)\n * @param {string} selector The CSS selector you want to stop tracking\n * @return {void}\n */\nfunction off(event, selector, handler) {\n const enterCallbacks = Object.keys(this.trackedElements[selector].enter || {});\n const leaveCallbacks = Object.keys(this.trackedElements[selector].leave || {});\n\n if ({}.hasOwnProperty.call(this.trackedElements, selector)) {\n if (handler) {\n if (this.trackedElements[selector][event]) {\n const callbackName = (typeof handler === 'function') ? handler.name : handler;\n delete this.trackedElements[selector][event][callbackName];\n }\n } else {\n delete this.trackedElements[selector][event];\n }\n }\n\n if (!enterCallbacks.length && !leaveCallbacks.length) {\n delete this.trackedElements[selector];\n }\n}\n\nexport default off;\n","/**\n * Starts tracking elements matching a CSS selector\n *\n * @param {string} event The event you want to track (enter or leave)\n * @param {string} selector The element you want to track\n * @param {function} callback The callback function to handle the event\n * @return {void}\n */\nfunction on(event, selector, callback) {\n const allowed = ['enter', 'leave'];\n\n if (!event) throw new Error('No event given. Choose either enter or leave');\n if (!selector) throw new Error('No selector to track');\n if (allowed.indexOf(event) < 0) throw new Error(`${event} event is not supported`);\n\n if (!{}.hasOwnProperty.call(this.trackedElements, selector)) {\n this.trackedElements[selector] = {};\n }\n\n this.trackedElements[selector].nodes = [];\n\n for (let i = 0, elems = document.querySelectorAll(selector); i < elems.length; i++) {\n const item = {\n isVisible: false,\n wasVisible: false,\n node: elems[i]\n };\n\n this.trackedElements[selector].nodes.push(item);\n }\n\n if (typeof callback === 'function') {\n if (!this.trackedElements[selector][event]) {\n this.trackedElements[selector][event] = {};\n }\n\n this.trackedElements[selector][event][(callback.name || 'anonymous')] = callback;\n }\n}\n\nexport default on;\n","/**\n * Observes DOM mutations and runs a callback function when\n * detecting one.\n *\n * @param {node} obj The DOM node you want to observe\n * @param {function} callback The callback function you want to call\n * @return {void}\n */\nfunction observeDOM(obj, callback) {\n const MutationObserver = window.MutationObserver || window.WebKitMutationObserver;\n\n /* istanbul ignore else */\n if (MutationObserver) {\n const obs = new MutationObserver(callback);\n\n obs.observe(obj, {\n childList: true,\n subtree: true\n });\n } else {\n obj.addEventListener('DOMNodeInserted', callback, false);\n obj.addEventListener('DOMNodeRemoved', callback, false);\n }\n}\n\nexport default observeDOM;\n","// Methods\nimport attach from './methods/attach';\nimport debouncedScroll from './methods/debounced-scroll';\nimport destroy from './methods/destroy';\nimport off from './methods/off';\nimport on from './methods/on';\n\n// Helpers\nimport observeDOM from './helpers/observe-dom';\nimport inViewport from './helpers/in-viewport';\n\n/**\n * Detects wether DOM nodes enter or leave the viewport\n *\n * @constructor\n * @param {object} options The configuration object\n */\nfunction OnScreen(options = { tolerance: 0, debounce: 100, container: window }) {\n this.options = {};\n this.trackedElements = {};\n\n Object.defineProperties(this.options, {\n container: {\n configurable: false,\n enumerable: false,\n get() {\n let container;\n\n if (typeof options.container === 'string') {\n container = document.querySelector(options.container);\n } else if (options.container instanceof HTMLElement) {\n container = options.container;\n }\n\n return container || window;\n },\n set(value) {\n options.container = value;\n }\n },\n debounce: {\n get() {\n return parseInt(options.debounce, 10) || 100;\n },\n set(value) {\n options.debounce = value;\n }\n },\n tolerance: {\n get() {\n return parseInt(options.tolerance, 10) || 0;\n },\n set(value) {\n options.tolerance = value;\n }\n }\n });\n\n Object.defineProperty(this, '_scroll', {\n enumerable: false,\n configurable: false,\n writable: false,\n value: this._debouncedScroll.call(this)\n });\n\n observeDOM(document.querySelector('body'), () => {\n Object.keys(this.trackedElements).forEach((element) => {\n this.on('enter', element);\n this.on('leave', element);\n });\n });\n\n this.attach();\n}\n\nObject.defineProperties(OnScreen.prototype, {\n _debouncedScroll: {\n configurable: false,\n writable: false,\n enumerable: false,\n value: debouncedScroll\n },\n attach: {\n configurable: false,\n writable: false,\n enumerable: false,\n value: attach\n },\n destroy: {\n configurable: false,\n writable: false,\n enumerable: false,\n value: destroy\n },\n off: {\n configurable: false,\n writable: false,\n enumerable: false,\n value: off\n },\n on: {\n configurable: false,\n writable: false,\n enumerable: false,\n value: on\n }\n});\n\nOnScreen.check = inViewport;\n\nexport default OnScreen;\n"],"names":["attach","container","options","HTMLElement","style","window","getComputedStyle","position","addEventListener","_scroll","attached","inViewport","el","tolerance","Error","document","querySelector","elRect","getBoundingClientRect","bottom","right","left","innerWidth","documentElement","clientWidth","top","innerHeight","clientHeight","inContainer","containerRect","offsetTop","scrollTop","offsetLeft","scrollLeft","width","height","eventHandler","trackedElements","selectors","Object","keys","testVisibility","length","forEach","selector","nodes","item","node","wasVisible","isVisible","enter","callback","leave","debouncedScroll","timeout","setTimeout","debounce","destroy","removeEventListener","off","event","handler","enterCallbacks","leaveCallbacks","hasOwnProperty","call","callbackName","name","on","allowed","indexOf","i","elems","querySelectorAll","push","observeDOM","obj","MutationObserver","WebKitMutationObserver","obs","observe","OnScreen","defineProperties","value","parseInt","defineProperty","_debouncedScroll","element","prototype","check"],"mappings":"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"} | ||
| {"version":3,"file":null,"sources":["../lib/methods/attach.js","../lib/helpers/in-viewport.js","../lib/helpers/in-container.js","../lib/helpers/scroll-handler.js","../lib/methods/debounced-scroll.js","../lib/methods/destroy.js","../lib/methods/off.js","../lib/methods/on.js","../lib/helpers/observe-dom.js","../lib/index.js"],"sourcesContent":["/**\n * Attaches the scroll event handler\n *\n * @return {void}\n */\nfunction attach() {\n const container = this.options.container;\n\n if (container instanceof HTMLElement) {\n const style = window.getComputedStyle(container);\n\n if (style.position === 'static') {\n container.style.position = 'relative';\n }\n }\n\n container.addEventListener('scroll', this._scroll, { passive: true });\n window.addEventListener('resize', this._scroll, { passive: true });\n this._scroll();\n this.attached = true;\n}\n\nexport default attach;\n","/**\n * Checks an element's position in respect to the viewport\n * and determines wether it's inside the viewport.\n *\n * @param {node} element The DOM node you want to check\n * @return {boolean} A boolean value that indicates wether is on or off the viewport.\n */\nfunction inViewport(el, options = { tolerance: 0 }) {\n if (!el) {\n throw new Error('You should specify the element you want to test');\n }\n\n if (typeof el === 'string') {\n el = document.querySelector(el);\n }\n\n const elRect = el.getBoundingClientRect();\n\n return (\n // Check bottom boundary\n elRect.bottom - options.tolerance > 0 &&\n\n // Check right boundary\n elRect.right - options.tolerance > 0 &&\n\n // Check left boundary\n elRect.left + options.tolerance < (window.innerWidth ||\n document.documentElement.clientWidth) &&\n\n // Check top boundary\n elRect.top + options.tolerance < (window.innerHeight ||\n document.documentElement.clientHeight)\n );\n}\n\nexport default inViewport;\n","/**\n * Checks an element's position in respect to a HTMLElement\n * and determines wether it's within its boundaries.\n *\n * @param {node} element The DOM node you want to check\n * @return {boolean} A boolean value that indicates wether is on or off the container.\n */\nfunction inContainer(el, options = { tolerance: 0, container: '' }) {\n if (!el) {\n throw new Error('You should specify the element you want to test');\n }\n\n if (typeof el === 'string') {\n el = document.querySelector(el);\n }\n if (typeof options === 'string') {\n options = {\n tolerance: 0,\n container: document.querySelector(options)\n };\n }\n if (typeof options.container === 'string') {\n options.container = document.querySelector(options.container);\n }\n if (options instanceof HTMLElement) {\n options = {\n tolerance: 0,\n container: options\n };\n }\n if (!options.container) {\n throw new Error('You should specify a container element');\n }\n\n const containerRect = options.container.getBoundingClientRect();\n\n return (\n // // Check bottom boundary\n (el.offsetTop + el.clientHeight) - options.tolerance >\n options.container.scrollTop &&\n\n // Check right boundary\n (el.offsetLeft + el.clientWidth) - options.tolerance >\n options.container.scrollLeft &&\n\n // Check left boundary\n el.offsetLeft + options.tolerance <\n containerRect.width + options.container.scrollLeft &&\n\n // // Check top boundary\n el.offsetTop + options.tolerance <\n containerRect.height + options.container.scrollTop\n );\n}\n\nexport default inContainer;\n","import inViewport from './in-viewport';\nimport inContainer from './in-container';\n\n// TODO: Refactor this so it can be easily tested\n/* istanbul ignore next */\nfunction eventHandler(trackedElements = {}, options = { tolerance: 0 }) {\n const selectors = Object.keys(trackedElements);\n let testVisibility;\n\n if (!selectors.length) return;\n\n if (options.container === window) {\n testVisibility = inViewport;\n } else {\n testVisibility = inContainer;\n }\n\n selectors.forEach((selector) => {\n trackedElements[selector].nodes.forEach((item) => {\n if (testVisibility(item.node, options)) {\n item.wasVisible = item.isVisible;\n item.isVisible = true;\n } else {\n item.wasVisible = item.isVisible;\n item.isVisible = false;\n }\n if (item.isVisible === true && item.wasVisible === false) {\n if (!trackedElements[selector].enter) return;\n\n Object.keys(trackedElements[selector].enter).forEach((callback) => {\n if (typeof trackedElements[selector].enter[callback] === 'function') {\n trackedElements[selector].enter[callback](item.node, 'enter');\n }\n });\n }\n if (item.isVisible === false && item.wasVisible === true) {\n if (!trackedElements[selector].leave) return;\n\n Object.keys(trackedElements[selector].leave).forEach((callback) => {\n if (typeof trackedElements[selector].leave[callback] === 'function') {\n trackedElements[selector].leave[callback](item.node, 'leave');\n }\n });\n }\n });\n });\n}\n\nexport default eventHandler;\n","import scrollHandler from '../helpers/scroll-handler';\n\n/**\n * Debounces the scroll event to avoid performance issues\n *\n * @return {void}\n */\nfunction debouncedScroll() {\n let timeout;\n\n return () => {\n clearTimeout(timeout);\n\n timeout = setTimeout(() => {\n scrollHandler(this.trackedElements, this.options);\n }, this.options.debounce);\n };\n}\n\nexport default debouncedScroll;\n","/**\n * Removes the scroll event handler\n *\n * @return {void}\n */\nfunction destroy() {\n this.options.container.removeEventListener('scroll', this._scroll);\n window.removeEventListener('resize', this._scroll);\n this.attached = false;\n}\n\nexport default destroy;\n","/**\n * Stops tracking elements matching a CSS selector. If a selector has no\n * callbacks it gets removed.\n *\n * @param {string} event The event you want to stop tracking (enter or leave)\n * @param {string} selector The CSS selector you want to stop tracking\n * @return {void}\n */\nfunction off(event, selector, handler) {\n const enterCallbacks = Object.keys(this.trackedElements[selector].enter || {});\n const leaveCallbacks = Object.keys(this.trackedElements[selector].leave || {});\n\n if ({}.hasOwnProperty.call(this.trackedElements, selector)) {\n if (handler) {\n if (this.trackedElements[selector][event]) {\n const callbackName = (typeof handler === 'function') ? handler.name : handler;\n delete this.trackedElements[selector][event][callbackName];\n }\n } else {\n delete this.trackedElements[selector][event];\n }\n }\n\n if (!enterCallbacks.length && !leaveCallbacks.length) {\n delete this.trackedElements[selector];\n }\n}\n\nexport default off;\n","/**\n * Starts tracking elements matching a CSS selector\n *\n * @param {string} event The event you want to track (enter or leave)\n * @param {string} selector The element you want to track\n * @param {function} callback The callback function to handle the event\n * @return {void}\n */\nfunction on(event, selector, callback) {\n const allowed = ['enter', 'leave'];\n\n if (!event) throw new Error('No event given. Choose either enter or leave');\n if (!selector) throw new Error('No selector to track');\n if (allowed.indexOf(event) < 0) throw new Error(`${event} event is not supported`);\n\n if (!{}.hasOwnProperty.call(this.trackedElements, selector)) {\n this.trackedElements[selector] = {};\n }\n\n this.trackedElements[selector].nodes = [];\n\n for (let i = 0, elems = document.querySelectorAll(selector); i < elems.length; i++) {\n const item = {\n isVisible: false,\n wasVisible: false,\n node: elems[i]\n };\n\n this.trackedElements[selector].nodes.push(item);\n }\n\n if (typeof callback === 'function') {\n if (!this.trackedElements[selector][event]) {\n this.trackedElements[selector][event] = {};\n }\n\n this.trackedElements[selector][event][(callback.name || 'anonymous')] = callback;\n }\n}\n\nexport default on;\n","/**\n * Observes DOM mutations and runs a callback function when\n * detecting one.\n *\n * @param {node} obj The DOM node you want to observe\n * @param {function} callback The callback function you want to call\n * @return {void}\n */\nfunction observeDOM(obj, callback) {\n const MutationObserver = window.MutationObserver || window.WebKitMutationObserver;\n\n /* istanbul ignore else */\n if (MutationObserver) {\n const obs = new MutationObserver(callback);\n\n obs.observe(obj, {\n childList: true,\n subtree: true\n });\n } else {\n obj.addEventListener('DOMNodeInserted', callback, false);\n obj.addEventListener('DOMNodeRemoved', callback, false);\n }\n}\n\nexport default observeDOM;\n","// Methods\nimport attach from './methods/attach';\nimport debouncedScroll from './methods/debounced-scroll';\nimport destroy from './methods/destroy';\nimport off from './methods/off';\nimport on from './methods/on';\n\n// Helpers\nimport observeDOM from './helpers/observe-dom';\nimport inViewport from './helpers/in-viewport';\n\n/**\n * Detects wether DOM nodes enter or leave the viewport\n *\n * @constructor\n * @param {object} options The configuration object\n */\nfunction OnScreen(options = { tolerance: 0, debounce: 100, container: window }) {\n this.options = {};\n this.trackedElements = {};\n\n Object.defineProperties(this.options, {\n container: {\n configurable: false,\n enumerable: false,\n get() {\n let container;\n\n if (typeof options.container === 'string') {\n container = document.querySelector(options.container);\n } else if (options.container instanceof HTMLElement) {\n container = options.container;\n }\n\n return container || window;\n },\n set(value) {\n options.container = value;\n }\n },\n debounce: {\n get() {\n return parseInt(options.debounce, 10) || 100;\n },\n set(value) {\n options.debounce = value;\n }\n },\n tolerance: {\n get() {\n return parseInt(options.tolerance, 10) || 0;\n },\n set(value) {\n options.tolerance = value;\n }\n }\n });\n\n Object.defineProperty(this, '_scroll', {\n enumerable: false,\n configurable: false,\n writable: false,\n value: this._debouncedScroll.call(this)\n });\n\n observeDOM(document.querySelector('body'), () => {\n Object.keys(this.trackedElements).forEach((element) => {\n this.on('enter', element);\n this.on('leave', element);\n });\n });\n\n this.attach();\n}\n\nObject.defineProperties(OnScreen.prototype, {\n _debouncedScroll: {\n configurable: false,\n writable: false,\n enumerable: false,\n value: debouncedScroll\n },\n attach: {\n configurable: false,\n writable: false,\n enumerable: false,\n value: attach\n },\n destroy: {\n configurable: false,\n writable: false,\n enumerable: false,\n value: destroy\n },\n off: {\n configurable: false,\n writable: false,\n enumerable: false,\n value: off\n },\n on: {\n configurable: false,\n writable: false,\n enumerable: false,\n value: on\n }\n});\n\nOnScreen.check = inViewport;\n\nexport default OnScreen;\n"],"names":["attach","container","options","HTMLElement","style","window","getComputedStyle","position","addEventListener","_scroll","passive","attached","inViewport","el","tolerance","Error","document","querySelector","elRect","getBoundingClientRect","bottom","right","left","innerWidth","documentElement","clientWidth","top","innerHeight","clientHeight","inContainer","containerRect","offsetTop","scrollTop","offsetLeft","scrollLeft","width","height","eventHandler","trackedElements","selectors","Object","keys","testVisibility","length","forEach","selector","nodes","item","node","wasVisible","isVisible","enter","callback","leave","debouncedScroll","timeout","setTimeout","debounce","destroy","removeEventListener","off","event","handler","enterCallbacks","leaveCallbacks","hasOwnProperty","call","callbackName","name","on","allowed","indexOf","i","elems","querySelectorAll","push","observeDOM","obj","MutationObserver","WebKitMutationObserver","obs","observe","OnScreen","defineProperties","value","parseInt","defineProperty","_debouncedScroll","element","prototype","check"],"mappings":"AAAA;;;;;AAKA,SAASA,MAAT,GAAkB;QACRC,YAAY,KAAKC,OAAL,CAAaD,SAA/B;;QAEIA,qBAAqBE,WAAzB,EAAsC;YAC5BC,QAAQC,OAAOC,gBAAP,CAAwBL,SAAxB,CAAd;;YAEIG,MAAMG,QAAN,KAAmB,QAAvB,EAAiC;sBACnBH,KAAV,CAAgBG,QAAhB,GAA2B,UAA3B;;;;cAIEC,gBAAV,CAA2B,QAA3B,EAAqC,KAAKC,OAA1C,EAAmD,EAAEC,SAAS,IAAX,EAAnD;WACOF,gBAAP,CAAwB,QAAxB,EAAkC,KAAKC,OAAvC,EAAgD,EAAEC,SAAS,IAAX,EAAhD;SACKD,OAAL;SACKE,QAAL,GAAgB,IAAhB;CAGJ;;ACtBA;;;;;;;AAOA,SAASC,UAAT,CAAoBC,EAApB,EAAoD;QAA5BX,OAA4B,uEAAlB,EAAEY,WAAW,CAAb,EAAkB;;QAC5C,CAACD,EAAL,EAAS;cACC,IAAIE,KAAJ,CAAU,iDAAV,CAAN;;;QAGA,OAAOF,EAAP,KAAc,QAAlB,EAA4B;aACnBG,SAASC,aAAT,CAAuBJ,EAAvB,CAAL;;;QAGEK,SAASL,GAAGM,qBAAH,EAAf;;;;eAIWC,MAAP,GAAgBlB,QAAQY,SAAxB,GAAoC,CAApC;;;eAGOO,KAAP,GAAenB,QAAQY,SAAvB,GAAmC,CAHnC;;;eAMOQ,IAAP,GAAcpB,QAAQY,SAAtB,IAAmCT,OAAOkB,UAAP,IACnCP,SAASQ,eAAT,CAAyBC,WADzB,CANA;;;eAUOC,GAAP,GAAaxB,QAAQY,SAArB,IAAkCT,OAAOsB,WAAP,IAClCX,SAASQ,eAAT,CAAyBI,YADzB;;CAKR;;ACnCA;;;;;;;AAOA,SAASC,WAAT,CAAqBhB,EAArB,EAAoE;QAA3CX,OAA2C,uEAAjC,EAAEY,WAAW,CAAb,EAAgBb,WAAW,EAA3B,EAAiC;;QAC5D,CAACY,EAAL,EAAS;cACC,IAAIE,KAAJ,CAAU,iDAAV,CAAN;;;QAGA,OAAOF,EAAP,KAAc,QAAlB,EAA4B;aACnBG,SAASC,aAAT,CAAuBJ,EAAvB,CAAL;;QAEA,OAAOX,OAAP,KAAmB,QAAvB,EAAiC;kBACnB;uBACK,CADL;uBAEKc,SAASC,aAAT,CAAuBf,OAAvB;SAFf;;QAKA,OAAOA,QAAQD,SAAf,KAA6B,QAAjC,EAA2C;gBAC/BA,SAAR,GAAoBe,SAASC,aAAT,CAAuBf,QAAQD,SAA/B,CAApB;;QAEAC,mBAAmBC,WAAvB,EAAoC;kBACtB;uBACK,CADL;uBAEKD;SAFf;;QAKA,CAACA,QAAQD,SAAb,EAAwB;cACd,IAAIc,KAAJ,CAAU,wCAAV,CAAN;;;QAGEe,gBAAgB5B,QAAQD,SAAR,CAAkBkB,qBAAlB,EAAtB;;;;WAIQY,SAAH,GAAelB,GAAGe,YAAnB,GAAmC1B,QAAQY,SAA3C,GACAZ,QAAQD,SAAR,CAAkB+B,SADlB;;;WAIIC,UAAH,GAAgBpB,GAAGY,WAApB,GAAmCvB,QAAQY,SAA3C,GACAZ,QAAQD,SAAR,CAAkBiC,UALlB;;;WAQGD,UAAH,GAAgB/B,QAAQY,SAAxB,GACAgB,cAAcK,KAAd,GAAsBjC,QAAQD,SAAR,CAAkBiC,UATxC;;;WAYGH,SAAH,GAAe7B,QAAQY,SAAvB,GACAgB,cAAcM,MAAd,GAAuBlC,QAAQD,SAAR,CAAkB+B;;CAIjD;;ACpDA;;AAEA,SAASK,YAAT,GAAwE;QAAlDC,eAAkD,uEAAhC,EAAgC;QAA5BpC,OAA4B,uEAAlB,EAAEY,WAAW,CAAb,EAAkB;;QAC9DyB,YAAYC,OAAOC,IAAP,CAAYH,eAAZ,CAAlB;QACII,uBAAJ;;QAEI,CAACH,UAAUI,MAAf,EAAuB;;QAEnBzC,QAAQD,SAAR,KAAsBI,MAA1B,EAAkC;yBACbO,UAAjB;KADJ,MAEO;yBACciB,WAAjB;;;cAGMe,OAAV,CAAkB,UAACC,QAAD,EAAc;wBACZA,QAAhB,EAA0BC,KAA1B,CAAgCF,OAAhC,CAAwC,UAACG,IAAD,EAAU;gBAC1CL,eAAeK,KAAKC,IAApB,EAA0B9C,OAA1B,CAAJ,EAAwC;qBAC/B+C,UAAL,GAAkBF,KAAKG,SAAvB;qBACKA,SAAL,GAAiB,IAAjB;aAFJ,MAGO;qBACED,UAAL,GAAkBF,KAAKG,SAAvB;qBACKA,SAAL,GAAiB,KAAjB;;gBAEAH,KAAKG,SAAL,KAAmB,IAAnB,IAA2BH,KAAKE,UAAL,KAAoB,KAAnD,EAA0D;oBAClD,CAACX,gBAAgBO,QAAhB,EAA0BM,KAA/B,EAAsC;;uBAE/BV,IAAP,CAAYH,gBAAgBO,QAAhB,EAA0BM,KAAtC,EAA6CP,OAA7C,CAAqD,UAACQ,QAAD,EAAc;wBAC3D,OAAOd,gBAAgBO,QAAhB,EAA0BM,KAA1B,CAAgCC,QAAhC,CAAP,KAAqD,UAAzD,EAAqE;wCACjDP,QAAhB,EAA0BM,KAA1B,CAAgCC,QAAhC,EAA0CL,KAAKC,IAA/C,EAAqD,OAArD;;iBAFR;;gBAMAD,KAAKG,SAAL,KAAmB,KAAnB,IAA4BH,KAAKE,UAAL,KAAoB,IAApD,EAA0D;oBAClD,CAACX,gBAAgBO,QAAhB,EAA0BQ,KAA/B,EAAsC;;uBAE/BZ,IAAP,CAAYH,gBAAgBO,QAAhB,EAA0BQ,KAAtC,EAA6CT,OAA7C,CAAqD,UAACQ,QAAD,EAAc;wBAC3D,OAAOd,gBAAgBO,QAAhB,EAA0BQ,KAA1B,CAAgCD,QAAhC,CAAP,KAAqD,UAAzD,EAAqE;wCACjDP,QAAhB,EAA0BQ,KAA1B,CAAgCD,QAAhC,EAA0CL,KAAKC,IAA/C,EAAqD,OAArD;;iBAFR;;SApBR;KADJ;CA+BJ;;AC9CA;;;;;AAKA,SAASM,eAAT,GAA2B;;;QACnBC,gBAAJ;;WAEO,YAAM;qBACIA,OAAb;;kBAEUC,WAAW,YAAM;yBACT,MAAKlB,eAAnB,EAAoC,MAAKpC,OAAzC;SADM,EAEP,MAAKA,OAAL,CAAauD,QAFN,CAAV;KAHJ;CASJ;;ACnBA;;;;;AAKA,SAASC,OAAT,GAAmB;OACVxD,OAAL,CAAaD,SAAb,CAAuB0D,mBAAvB,CAA2C,QAA3C,EAAqD,KAAKlD,OAA1D;SACOkD,mBAAP,CAA2B,QAA3B,EAAqC,KAAKlD,OAA1C;OACKE,QAAL,GAAgB,KAAhB;CAGJ;;ACXA;;;;;;;;AAQA,SAASiD,GAAT,CAAaC,KAAb,EAAoBhB,QAApB,EAA8BiB,OAA9B,EAAuC;QAC7BC,iBAAiBvB,OAAOC,IAAP,CAAY,KAAKH,eAAL,CAAqBO,QAArB,EAA+BM,KAA/B,IAAwC,EAApD,CAAvB;QACMa,iBAAiBxB,OAAOC,IAAP,CAAY,KAAKH,eAAL,CAAqBO,QAArB,EAA+BQ,KAA/B,IAAwC,EAApD,CAAvB;;QAEI,GAAGY,cAAH,CAAkBC,IAAlB,CAAuB,KAAK5B,eAA5B,EAA6CO,QAA7C,CAAJ,EAA4D;YACpDiB,OAAJ,EAAa;gBACL,KAAKxB,eAAL,CAAqBO,QAArB,EAA+BgB,KAA/B,CAAJ,EAA2C;oBACjCM,eAAgB,OAAOL,OAAP,KAAmB,UAApB,GAAkCA,QAAQM,IAA1C,GAAiDN,OAAtE;uBACO,KAAKxB,eAAL,CAAqBO,QAArB,EAA+BgB,KAA/B,EAAsCM,YAAtC,CAAP;;SAHR,MAKO;mBACI,KAAK7B,eAAL,CAAqBO,QAArB,EAA+BgB,KAA/B,CAAP;;;;QAIJ,CAACE,eAAepB,MAAhB,IAA0B,CAACqB,eAAerB,MAA9C,EAAsD;eAC3C,KAAKL,eAAL,CAAqBO,QAArB,CAAP;;CAIR;;AC5BA;;;;;;;;AAQA,SAASwB,EAAT,CAAYR,KAAZ,EAAmBhB,QAAnB,EAA6BO,QAA7B,EAAuC;QAC7BkB,UAAU,CAAC,OAAD,EAAU,OAAV,CAAhB;;QAEI,CAACT,KAAL,EAAY,MAAM,IAAI9C,KAAJ,CAAU,8CAAV,CAAN;QACR,CAAC8B,QAAL,EAAe,MAAM,IAAI9B,KAAJ,CAAU,sBAAV,CAAN;QACXuD,QAAQC,OAAR,CAAgBV,KAAhB,IAAyB,CAA7B,EAAgC,MAAM,IAAI9C,KAAJ,CAAa8C,KAAb,6BAAN;;QAE5B,CAAC,GAAGI,cAAH,CAAkBC,IAAlB,CAAuB,KAAK5B,eAA5B,EAA6CO,QAA7C,CAAL,EAA6D;aACpDP,eAAL,CAAqBO,QAArB,IAAiC,EAAjC;;;SAGCP,eAAL,CAAqBO,QAArB,EAA+BC,KAA/B,GAAuC,EAAvC;;SAEK,IAAI0B,IAAI,CAAR,EAAWC,QAAQzD,SAAS0D,gBAAT,CAA0B7B,QAA1B,CAAxB,EAA6D2B,IAAIC,MAAM9B,MAAvE,EAA+E6B,GAA/E,EAAoF;YAC1EzB,OAAO;uBACE,KADF;wBAEG,KAFH;kBAGH0B,MAAMD,CAAN;SAHV;;aAMKlC,eAAL,CAAqBO,QAArB,EAA+BC,KAA/B,CAAqC6B,IAArC,CAA0C5B,IAA1C;;;QAGA,OAAOK,QAAP,KAAoB,UAAxB,EAAoC;YAC5B,CAAC,KAAKd,eAAL,CAAqBO,QAArB,EAA+BgB,KAA/B,CAAL,EAA4C;iBACnCvB,eAAL,CAAqBO,QAArB,EAA+BgB,KAA/B,IAAwC,EAAxC;;;aAGCvB,eAAL,CAAqBO,QAArB,EAA+BgB,KAA/B,EAAuCT,SAASgB,IAAT,IAAiB,WAAxD,IAAwEhB,QAAxE;;CAIR;;ACxCA;;;;;;;;AAQA,SAASwB,UAAT,CAAoBC,GAApB,EAAyBzB,QAAzB,EAAmC;QACzB0B,mBAAmBzE,OAAOyE,gBAAP,IAA2BzE,OAAO0E,sBAA3D;;;QAGID,gBAAJ,EAAsB;YACZE,MAAM,IAAIF,gBAAJ,CAAqB1B,QAArB,CAAZ;;YAEI6B,OAAJ,CAAYJ,GAAZ,EAAiB;uBACF,IADE;qBAEJ;SAFb;KAHJ,MAOO;YACCrE,gBAAJ,CAAqB,iBAArB,EAAwC4C,QAAxC,EAAkD,KAAlD;YACI5C,gBAAJ,CAAqB,gBAArB,EAAuC4C,QAAvC,EAAiD,KAAjD;;CAIR;;ACdA;;;;;;AAMA,SAAS8B,QAAT,GAAgF;;;QAA9DhF,OAA8D,uEAApD,EAAEY,WAAW,CAAb,EAAgB2C,UAAU,GAA1B,EAA+BxD,WAAWI,MAA1C,EAAoD;;SACvEH,OAAL,GAAe,EAAf;SACKoC,eAAL,GAAuB,EAAvB;;WAEO6C,gBAAP,CAAwB,KAAKjF,OAA7B,EAAsC;mBACvB;0BACO,KADP;wBAEK,KAFL;eAAA,iBAGD;oBACED,kBAAJ;;oBAEI,OAAOC,QAAQD,SAAf,KAA6B,QAAjC,EAA2C;gCAC3Be,SAASC,aAAT,CAAuBf,QAAQD,SAA/B,CAAZ;iBADJ,MAEO,IAAIC,QAAQD,SAAR,YAA6BE,WAAjC,EAA8C;gCACrCD,QAAQD,SAApB;;;uBAGGA,aAAaI,MAApB;aAZG;eAAA,eAcH+E,KAdG,EAcI;wBACCnF,SAAR,GAAoBmF,KAApB;;SAhB0B;kBAmBxB;eAAA,iBACA;uBACKC,SAASnF,QAAQuD,QAAjB,EAA2B,EAA3B,KAAkC,GAAzC;aAFE;eAAA,eAIF2B,KAJE,EAIK;wBACC3B,QAAR,GAAmB2B,KAAnB;;SAxB0B;mBA2BvB;eAAA,iBACD;uBACKC,SAASnF,QAAQY,SAAjB,EAA4B,EAA5B,KAAmC,CAA1C;aAFG;eAAA,eAIHsE,KAJG,EAII;wBACCtE,SAAR,GAAoBsE,KAApB;;;KAhCZ;;WAqCOE,cAAP,CAAsB,IAAtB,EAA4B,SAA5B,EAAuC;oBACvB,KADuB;sBAErB,KAFqB;kBAGzB,KAHyB;eAI5B,KAAKC,gBAAL,CAAsBrB,IAAtB,CAA2B,IAA3B;KAJX;;eAOWlD,SAASC,aAAT,CAAuB,MAAvB,CAAX,EAA2C,YAAM;eACtCwB,IAAP,CAAY,MAAKH,eAAjB,EAAkCM,OAAlC,CAA0C,UAAC4C,OAAD,EAAa;kBAC9CnB,EAAL,CAAQ,OAAR,EAAiBmB,OAAjB;kBACKnB,EAAL,CAAQ,OAAR,EAAiBmB,OAAjB;SAFJ;KADJ;;SAOKxF,MAAL;;;AAGJwC,OAAO2C,gBAAP,CAAwBD,SAASO,SAAjC,EAA4C;sBACtB;sBACA,KADA;kBAEJ,KAFI;oBAGF,KAHE;eAIPnC;KAL6B;YAOhC;sBACU,KADV;kBAEM,KAFN;oBAGQ,KAHR;eAIGtD;KAX6B;aAa/B;sBACS,KADT;kBAEK,KAFL;oBAGO,KAHP;eAIE0D;KAjB6B;SAmBnC;sBACa,KADb;kBAES,KAFT;oBAGW,KAHX;eAIME;KAvB6B;QAyBpC;sBACc,KADd;kBAEU,KAFV;oBAGY,KAHZ;eAIOS;;CA7Bf;;AAiCAa,SAASQ,KAAT,GAAiB9E,UAAjB,CAEA;;"} |
@@ -23,4 +23,4 @@ (function (global, factory) { | ||
| container.addEventListener('scroll', this._scroll); | ||
| window.addEventListener('resize', this._scroll); | ||
| container.addEventListener('scroll', this._scroll, { passive: true }); | ||
| window.addEventListener('resize', this._scroll, { passive: true }); | ||
| this._scroll(); | ||
@@ -27,0 +27,0 @@ this.attached = true; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":null,"sources":["../lib/methods/attach.js","../lib/helpers/in-viewport.js","../lib/helpers/in-container.js","../lib/helpers/scroll-handler.js","../lib/methods/debounced-scroll.js","../lib/methods/destroy.js","../lib/methods/off.js","../lib/methods/on.js","../lib/helpers/observe-dom.js","../lib/index.js"],"sourcesContent":["/**\n * Attaches the scroll event handler\n *\n * @return {void}\n */\nfunction attach() {\n const container = this.options.container;\n\n if (container instanceof HTMLElement) {\n const style = window.getComputedStyle(container);\n\n if (style.position === 'static') {\n container.style.position = 'relative';\n }\n }\n\n container.addEventListener('scroll', this._scroll);\n window.addEventListener('resize', this._scroll);\n this._scroll();\n this.attached = true;\n}\n\nexport default attach;\n","/**\n * Checks an element's position in respect to the viewport\n * and determines wether it's inside the viewport.\n *\n * @param {node} element The DOM node you want to check\n * @return {boolean} A boolean value that indicates wether is on or off the viewport.\n */\nfunction inViewport(el, options = { tolerance: 0 }) {\n if (!el) {\n throw new Error('You should specify the element you want to test');\n }\n\n if (typeof el === 'string') {\n el = document.querySelector(el);\n }\n\n const elRect = el.getBoundingClientRect();\n\n return (\n // Check bottom boundary\n elRect.bottom - options.tolerance > 0 &&\n\n // Check right boundary\n elRect.right - options.tolerance > 0 &&\n\n // Check left boundary\n elRect.left + options.tolerance < (window.innerWidth ||\n document.documentElement.clientWidth) &&\n\n // Check top boundary\n elRect.top + options.tolerance < (window.innerHeight ||\n document.documentElement.clientHeight)\n );\n}\n\nexport default inViewport;\n","/**\n * Checks an element's position in respect to a HTMLElement\n * and determines wether it's within its boundaries.\n *\n * @param {node} element The DOM node you want to check\n * @return {boolean} A boolean value that indicates wether is on or off the container.\n */\nfunction inContainer(el, options = { tolerance: 0, container: '' }) {\n if (!el) {\n throw new Error('You should specify the element you want to test');\n }\n\n if (typeof el === 'string') {\n el = document.querySelector(el);\n }\n if (typeof options === 'string') {\n options = {\n tolerance: 0,\n container: document.querySelector(options)\n };\n }\n if (typeof options.container === 'string') {\n options.container = document.querySelector(options.container);\n }\n if (options instanceof HTMLElement) {\n options = {\n tolerance: 0,\n container: options\n };\n }\n if (!options.container) {\n throw new Error('You should specify a container element');\n }\n\n const containerRect = options.container.getBoundingClientRect();\n\n return (\n // // Check bottom boundary\n (el.offsetTop + el.clientHeight) - options.tolerance >\n options.container.scrollTop &&\n\n // Check right boundary\n (el.offsetLeft + el.clientWidth) - options.tolerance >\n options.container.scrollLeft &&\n\n // Check left boundary\n el.offsetLeft + options.tolerance <\n containerRect.width + options.container.scrollLeft &&\n\n // // Check top boundary\n el.offsetTop + options.tolerance <\n containerRect.height + options.container.scrollTop\n );\n}\n\nexport default inContainer;\n","import inViewport from './in-viewport';\nimport inContainer from './in-container';\n\n// TODO: Refactor this so it can be easily tested\n/* istanbul ignore next */\nfunction eventHandler(trackedElements = {}, options = { tolerance: 0 }) {\n const selectors = Object.keys(trackedElements);\n let testVisibility;\n\n if (!selectors.length) return;\n\n if (options.container === window) {\n testVisibility = inViewport;\n } else {\n testVisibility = inContainer;\n }\n\n selectors.forEach((selector) => {\n trackedElements[selector].nodes.forEach((item) => {\n if (testVisibility(item.node, options)) {\n item.wasVisible = item.isVisible;\n item.isVisible = true;\n } else {\n item.wasVisible = item.isVisible;\n item.isVisible = false;\n }\n if (item.isVisible === true && item.wasVisible === false) {\n if (!trackedElements[selector].enter) return;\n\n Object.keys(trackedElements[selector].enter).forEach((callback) => {\n if (typeof trackedElements[selector].enter[callback] === 'function') {\n trackedElements[selector].enter[callback](item.node, 'enter');\n }\n });\n }\n if (item.isVisible === false && item.wasVisible === true) {\n if (!trackedElements[selector].leave) return;\n\n Object.keys(trackedElements[selector].leave).forEach((callback) => {\n if (typeof trackedElements[selector].leave[callback] === 'function') {\n trackedElements[selector].leave[callback](item.node, 'leave');\n }\n });\n }\n });\n });\n}\n\nexport default eventHandler;\n","import scrollHandler from '../helpers/scroll-handler';\n\n/**\n * Debounces the scroll event to avoid performance issues\n *\n * @return {void}\n */\nfunction debouncedScroll() {\n let timeout;\n\n return () => {\n clearTimeout(timeout);\n\n timeout = setTimeout(() => {\n scrollHandler(this.trackedElements, this.options);\n }, this.options.debounce);\n };\n}\n\nexport default debouncedScroll;\n","/**\n * Removes the scroll event handler\n *\n * @return {void}\n */\nfunction destroy() {\n this.options.container.removeEventListener('scroll', this._scroll);\n window.removeEventListener('resize', this._scroll);\n this.attached = false;\n}\n\nexport default destroy;\n","/**\n * Stops tracking elements matching a CSS selector. If a selector has no\n * callbacks it gets removed.\n *\n * @param {string} event The event you want to stop tracking (enter or leave)\n * @param {string} selector The CSS selector you want to stop tracking\n * @return {void}\n */\nfunction off(event, selector, handler) {\n const enterCallbacks = Object.keys(this.trackedElements[selector].enter || {});\n const leaveCallbacks = Object.keys(this.trackedElements[selector].leave || {});\n\n if ({}.hasOwnProperty.call(this.trackedElements, selector)) {\n if (handler) {\n if (this.trackedElements[selector][event]) {\n const callbackName = (typeof handler === 'function') ? handler.name : handler;\n delete this.trackedElements[selector][event][callbackName];\n }\n } else {\n delete this.trackedElements[selector][event];\n }\n }\n\n if (!enterCallbacks.length && !leaveCallbacks.length) {\n delete this.trackedElements[selector];\n }\n}\n\nexport default off;\n","/**\n * Starts tracking elements matching a CSS selector\n *\n * @param {string} event The event you want to track (enter or leave)\n * @param {string} selector The element you want to track\n * @param {function} callback The callback function to handle the event\n * @return {void}\n */\nfunction on(event, selector, callback) {\n const allowed = ['enter', 'leave'];\n\n if (!event) throw new Error('No event given. Choose either enter or leave');\n if (!selector) throw new Error('No selector to track');\n if (allowed.indexOf(event) < 0) throw new Error(`${event} event is not supported`);\n\n if (!{}.hasOwnProperty.call(this.trackedElements, selector)) {\n this.trackedElements[selector] = {};\n }\n\n this.trackedElements[selector].nodes = [];\n\n for (let i = 0, elems = document.querySelectorAll(selector); i < elems.length; i++) {\n const item = {\n isVisible: false,\n wasVisible: false,\n node: elems[i]\n };\n\n this.trackedElements[selector].nodes.push(item);\n }\n\n if (typeof callback === 'function') {\n if (!this.trackedElements[selector][event]) {\n this.trackedElements[selector][event] = {};\n }\n\n this.trackedElements[selector][event][(callback.name || 'anonymous')] = callback;\n }\n}\n\nexport default on;\n","/**\n * Observes DOM mutations and runs a callback function when\n * detecting one.\n *\n * @param {node} obj The DOM node you want to observe\n * @param {function} callback The callback function you want to call\n * @return {void}\n */\nfunction observeDOM(obj, callback) {\n const MutationObserver = window.MutationObserver || window.WebKitMutationObserver;\n\n /* istanbul ignore else */\n if (MutationObserver) {\n const obs = new MutationObserver(callback);\n\n obs.observe(obj, {\n childList: true,\n subtree: true\n });\n } else {\n obj.addEventListener('DOMNodeInserted', callback, false);\n obj.addEventListener('DOMNodeRemoved', callback, false);\n }\n}\n\nexport default observeDOM;\n","// Methods\nimport attach from './methods/attach';\nimport debouncedScroll from './methods/debounced-scroll';\nimport destroy from './methods/destroy';\nimport off from './methods/off';\nimport on from './methods/on';\n\n// Helpers\nimport observeDOM from './helpers/observe-dom';\nimport inViewport from './helpers/in-viewport';\n\n/**\n * Detects wether DOM nodes enter or leave the viewport\n *\n * @constructor\n * @param {object} options The configuration object\n */\nfunction OnScreen(options = { tolerance: 0, debounce: 100, container: window }) {\n this.options = {};\n this.trackedElements = {};\n\n Object.defineProperties(this.options, {\n container: {\n configurable: false,\n enumerable: false,\n get() {\n let container;\n\n if (typeof options.container === 'string') {\n container = document.querySelector(options.container);\n } else if (options.container instanceof HTMLElement) {\n container = options.container;\n }\n\n return container || window;\n },\n set(value) {\n options.container = value;\n }\n },\n debounce: {\n get() {\n return parseInt(options.debounce, 10) || 100;\n },\n set(value) {\n options.debounce = value;\n }\n },\n tolerance: {\n get() {\n return parseInt(options.tolerance, 10) || 0;\n },\n set(value) {\n options.tolerance = value;\n }\n }\n });\n\n Object.defineProperty(this, '_scroll', {\n enumerable: false,\n configurable: false,\n writable: false,\n value: this._debouncedScroll.call(this)\n });\n\n observeDOM(document.querySelector('body'), () => {\n Object.keys(this.trackedElements).forEach((element) => {\n this.on('enter', element);\n this.on('leave', element);\n });\n });\n\n this.attach();\n}\n\nObject.defineProperties(OnScreen.prototype, {\n _debouncedScroll: {\n configurable: false,\n writable: false,\n enumerable: false,\n value: debouncedScroll\n },\n attach: {\n configurable: false,\n writable: false,\n enumerable: false,\n value: attach\n },\n destroy: {\n configurable: false,\n writable: false,\n enumerable: false,\n value: destroy\n },\n off: {\n configurable: false,\n writable: false,\n enumerable: false,\n value: off\n },\n on: {\n configurable: false,\n writable: false,\n enumerable: false,\n value: on\n }\n});\n\nOnScreen.check = inViewport;\n\nexport default OnScreen;\n"],"names":["attach","container","options","HTMLElement","style","window","getComputedStyle","position","addEventListener","_scroll","attached","inViewport","el","tolerance","Error","document","querySelector","elRect","getBoundingClientRect","bottom","right","left","innerWidth","documentElement","clientWidth","top","innerHeight","clientHeight","inContainer","containerRect","offsetTop","scrollTop","offsetLeft","scrollLeft","width","height","eventHandler","trackedElements","selectors","Object","keys","testVisibility","length","forEach","selector","nodes","item","node","wasVisible","isVisible","enter","callback","leave","debouncedScroll","timeout","clearTimeout","setTimeout","scrollHandler","debounce","destroy","removeEventListener","off","event","handler","enterCallbacks","leaveCallbacks","hasOwnProperty","call","callbackName","name","on","allowed","indexOf","i","elems","querySelectorAll","push","observeDOM","obj","MutationObserver","WebKitMutationObserver","obs","observe","childList","subtree","OnScreen","defineProperties","configurable","enumerable","get","set","value","parseInt","defineProperty","writable","_debouncedScroll","element","prototype","check"],"mappings":"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"} | ||
| {"version":3,"file":null,"sources":["../lib/methods/attach.js","../lib/helpers/in-viewport.js","../lib/helpers/in-container.js","../lib/helpers/scroll-handler.js","../lib/methods/debounced-scroll.js","../lib/methods/destroy.js","../lib/methods/off.js","../lib/methods/on.js","../lib/helpers/observe-dom.js","../lib/index.js"],"sourcesContent":["/**\n * Attaches the scroll event handler\n *\n * @return {void}\n */\nfunction attach() {\n const container = this.options.container;\n\n if (container instanceof HTMLElement) {\n const style = window.getComputedStyle(container);\n\n if (style.position === 'static') {\n container.style.position = 'relative';\n }\n }\n\n container.addEventListener('scroll', this._scroll, { passive: true });\n window.addEventListener('resize', this._scroll, { passive: true });\n this._scroll();\n this.attached = true;\n}\n\nexport default attach;\n","/**\n * Checks an element's position in respect to the viewport\n * and determines wether it's inside the viewport.\n *\n * @param {node} element The DOM node you want to check\n * @return {boolean} A boolean value that indicates wether is on or off the viewport.\n */\nfunction inViewport(el, options = { tolerance: 0 }) {\n if (!el) {\n throw new Error('You should specify the element you want to test');\n }\n\n if (typeof el === 'string') {\n el = document.querySelector(el);\n }\n\n const elRect = el.getBoundingClientRect();\n\n return (\n // Check bottom boundary\n elRect.bottom - options.tolerance > 0 &&\n\n // Check right boundary\n elRect.right - options.tolerance > 0 &&\n\n // Check left boundary\n elRect.left + options.tolerance < (window.innerWidth ||\n document.documentElement.clientWidth) &&\n\n // Check top boundary\n elRect.top + options.tolerance < (window.innerHeight ||\n document.documentElement.clientHeight)\n );\n}\n\nexport default inViewport;\n","/**\n * Checks an element's position in respect to a HTMLElement\n * and determines wether it's within its boundaries.\n *\n * @param {node} element The DOM node you want to check\n * @return {boolean} A boolean value that indicates wether is on or off the container.\n */\nfunction inContainer(el, options = { tolerance: 0, container: '' }) {\n if (!el) {\n throw new Error('You should specify the element you want to test');\n }\n\n if (typeof el === 'string') {\n el = document.querySelector(el);\n }\n if (typeof options === 'string') {\n options = {\n tolerance: 0,\n container: document.querySelector(options)\n };\n }\n if (typeof options.container === 'string') {\n options.container = document.querySelector(options.container);\n }\n if (options instanceof HTMLElement) {\n options = {\n tolerance: 0,\n container: options\n };\n }\n if (!options.container) {\n throw new Error('You should specify a container element');\n }\n\n const containerRect = options.container.getBoundingClientRect();\n\n return (\n // // Check bottom boundary\n (el.offsetTop + el.clientHeight) - options.tolerance >\n options.container.scrollTop &&\n\n // Check right boundary\n (el.offsetLeft + el.clientWidth) - options.tolerance >\n options.container.scrollLeft &&\n\n // Check left boundary\n el.offsetLeft + options.tolerance <\n containerRect.width + options.container.scrollLeft &&\n\n // // Check top boundary\n el.offsetTop + options.tolerance <\n containerRect.height + options.container.scrollTop\n );\n}\n\nexport default inContainer;\n","import inViewport from './in-viewport';\nimport inContainer from './in-container';\n\n// TODO: Refactor this so it can be easily tested\n/* istanbul ignore next */\nfunction eventHandler(trackedElements = {}, options = { tolerance: 0 }) {\n const selectors = Object.keys(trackedElements);\n let testVisibility;\n\n if (!selectors.length) return;\n\n if (options.container === window) {\n testVisibility = inViewport;\n } else {\n testVisibility = inContainer;\n }\n\n selectors.forEach((selector) => {\n trackedElements[selector].nodes.forEach((item) => {\n if (testVisibility(item.node, options)) {\n item.wasVisible = item.isVisible;\n item.isVisible = true;\n } else {\n item.wasVisible = item.isVisible;\n item.isVisible = false;\n }\n if (item.isVisible === true && item.wasVisible === false) {\n if (!trackedElements[selector].enter) return;\n\n Object.keys(trackedElements[selector].enter).forEach((callback) => {\n if (typeof trackedElements[selector].enter[callback] === 'function') {\n trackedElements[selector].enter[callback](item.node, 'enter');\n }\n });\n }\n if (item.isVisible === false && item.wasVisible === true) {\n if (!trackedElements[selector].leave) return;\n\n Object.keys(trackedElements[selector].leave).forEach((callback) => {\n if (typeof trackedElements[selector].leave[callback] === 'function') {\n trackedElements[selector].leave[callback](item.node, 'leave');\n }\n });\n }\n });\n });\n}\n\nexport default eventHandler;\n","import scrollHandler from '../helpers/scroll-handler';\n\n/**\n * Debounces the scroll event to avoid performance issues\n *\n * @return {void}\n */\nfunction debouncedScroll() {\n let timeout;\n\n return () => {\n clearTimeout(timeout);\n\n timeout = setTimeout(() => {\n scrollHandler(this.trackedElements, this.options);\n }, this.options.debounce);\n };\n}\n\nexport default debouncedScroll;\n","/**\n * Removes the scroll event handler\n *\n * @return {void}\n */\nfunction destroy() {\n this.options.container.removeEventListener('scroll', this._scroll);\n window.removeEventListener('resize', this._scroll);\n this.attached = false;\n}\n\nexport default destroy;\n","/**\n * Stops tracking elements matching a CSS selector. If a selector has no\n * callbacks it gets removed.\n *\n * @param {string} event The event you want to stop tracking (enter or leave)\n * @param {string} selector The CSS selector you want to stop tracking\n * @return {void}\n */\nfunction off(event, selector, handler) {\n const enterCallbacks = Object.keys(this.trackedElements[selector].enter || {});\n const leaveCallbacks = Object.keys(this.trackedElements[selector].leave || {});\n\n if ({}.hasOwnProperty.call(this.trackedElements, selector)) {\n if (handler) {\n if (this.trackedElements[selector][event]) {\n const callbackName = (typeof handler === 'function') ? handler.name : handler;\n delete this.trackedElements[selector][event][callbackName];\n }\n } else {\n delete this.trackedElements[selector][event];\n }\n }\n\n if (!enterCallbacks.length && !leaveCallbacks.length) {\n delete this.trackedElements[selector];\n }\n}\n\nexport default off;\n","/**\n * Starts tracking elements matching a CSS selector\n *\n * @param {string} event The event you want to track (enter or leave)\n * @param {string} selector The element you want to track\n * @param {function} callback The callback function to handle the event\n * @return {void}\n */\nfunction on(event, selector, callback) {\n const allowed = ['enter', 'leave'];\n\n if (!event) throw new Error('No event given. Choose either enter or leave');\n if (!selector) throw new Error('No selector to track');\n if (allowed.indexOf(event) < 0) throw new Error(`${event} event is not supported`);\n\n if (!{}.hasOwnProperty.call(this.trackedElements, selector)) {\n this.trackedElements[selector] = {};\n }\n\n this.trackedElements[selector].nodes = [];\n\n for (let i = 0, elems = document.querySelectorAll(selector); i < elems.length; i++) {\n const item = {\n isVisible: false,\n wasVisible: false,\n node: elems[i]\n };\n\n this.trackedElements[selector].nodes.push(item);\n }\n\n if (typeof callback === 'function') {\n if (!this.trackedElements[selector][event]) {\n this.trackedElements[selector][event] = {};\n }\n\n this.trackedElements[selector][event][(callback.name || 'anonymous')] = callback;\n }\n}\n\nexport default on;\n","/**\n * Observes DOM mutations and runs a callback function when\n * detecting one.\n *\n * @param {node} obj The DOM node you want to observe\n * @param {function} callback The callback function you want to call\n * @return {void}\n */\nfunction observeDOM(obj, callback) {\n const MutationObserver = window.MutationObserver || window.WebKitMutationObserver;\n\n /* istanbul ignore else */\n if (MutationObserver) {\n const obs = new MutationObserver(callback);\n\n obs.observe(obj, {\n childList: true,\n subtree: true\n });\n } else {\n obj.addEventListener('DOMNodeInserted', callback, false);\n obj.addEventListener('DOMNodeRemoved', callback, false);\n }\n}\n\nexport default observeDOM;\n","// Methods\nimport attach from './methods/attach';\nimport debouncedScroll from './methods/debounced-scroll';\nimport destroy from './methods/destroy';\nimport off from './methods/off';\nimport on from './methods/on';\n\n// Helpers\nimport observeDOM from './helpers/observe-dom';\nimport inViewport from './helpers/in-viewport';\n\n/**\n * Detects wether DOM nodes enter or leave the viewport\n *\n * @constructor\n * @param {object} options The configuration object\n */\nfunction OnScreen(options = { tolerance: 0, debounce: 100, container: window }) {\n this.options = {};\n this.trackedElements = {};\n\n Object.defineProperties(this.options, {\n container: {\n configurable: false,\n enumerable: false,\n get() {\n let container;\n\n if (typeof options.container === 'string') {\n container = document.querySelector(options.container);\n } else if (options.container instanceof HTMLElement) {\n container = options.container;\n }\n\n return container || window;\n },\n set(value) {\n options.container = value;\n }\n },\n debounce: {\n get() {\n return parseInt(options.debounce, 10) || 100;\n },\n set(value) {\n options.debounce = value;\n }\n },\n tolerance: {\n get() {\n return parseInt(options.tolerance, 10) || 0;\n },\n set(value) {\n options.tolerance = value;\n }\n }\n });\n\n Object.defineProperty(this, '_scroll', {\n enumerable: false,\n configurable: false,\n writable: false,\n value: this._debouncedScroll.call(this)\n });\n\n observeDOM(document.querySelector('body'), () => {\n Object.keys(this.trackedElements).forEach((element) => {\n this.on('enter', element);\n this.on('leave', element);\n });\n });\n\n this.attach();\n}\n\nObject.defineProperties(OnScreen.prototype, {\n _debouncedScroll: {\n configurable: false,\n writable: false,\n enumerable: false,\n value: debouncedScroll\n },\n attach: {\n configurable: false,\n writable: false,\n enumerable: false,\n value: attach\n },\n destroy: {\n configurable: false,\n writable: false,\n enumerable: false,\n value: destroy\n },\n off: {\n configurable: false,\n writable: false,\n enumerable: false,\n value: off\n },\n on: {\n configurable: false,\n writable: false,\n enumerable: false,\n value: on\n }\n});\n\nOnScreen.check = inViewport;\n\nexport default OnScreen;\n"],"names":["attach","container","options","HTMLElement","style","window","getComputedStyle","position","addEventListener","_scroll","passive","attached","inViewport","el","tolerance","Error","document","querySelector","elRect","getBoundingClientRect","bottom","right","left","innerWidth","documentElement","clientWidth","top","innerHeight","clientHeight","inContainer","containerRect","offsetTop","scrollTop","offsetLeft","scrollLeft","width","height","eventHandler","trackedElements","selectors","Object","keys","testVisibility","length","forEach","selector","nodes","item","node","wasVisible","isVisible","enter","callback","leave","debouncedScroll","timeout","clearTimeout","setTimeout","scrollHandler","debounce","destroy","removeEventListener","off","event","handler","enterCallbacks","leaveCallbacks","hasOwnProperty","call","callbackName","name","on","allowed","indexOf","i","elems","querySelectorAll","push","observeDOM","obj","MutationObserver","WebKitMutationObserver","obs","observe","childList","subtree","OnScreen","defineProperties","configurable","enumerable","get","set","value","parseInt","defineProperty","writable","_debouncedScroll","element","prototype","check"],"mappings":"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"} |
@@ -1,2 +0,2 @@ | ||
| !function(global,factory){"object"==typeof exports&&"undefined"!=typeof module?module.exports=factory():"function"==typeof define&&define.amd?define(factory):global.OnScreen=factory()}(this,function(){"use strict";function attach(){var container=this.options.container;if(container instanceof HTMLElement){var style=window.getComputedStyle(container);"static"===style.position&&(container.style.position="relative")}container.addEventListener("scroll",this._scroll),window.addEventListener("resize",this._scroll),this._scroll(),this.attached=!0}function inViewport(el){var options=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{tolerance:0};if(!el)throw new Error("You should specify the element you want to test");"string"==typeof el&&(el=document.querySelector(el));var elRect=el.getBoundingClientRect();return elRect.bottom-options.tolerance>0&&elRect.right-options.tolerance>0&&elRect.left+options.tolerance<(window.innerWidth||document.documentElement.clientWidth)&&elRect.top+options.tolerance<(window.innerHeight||document.documentElement.clientHeight)}function inContainer(el){var options=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{tolerance:0,container:""};if(!el)throw new Error("You should specify the element you want to test");if("string"==typeof el&&(el=document.querySelector(el)),"string"==typeof options&&(options={tolerance:0,container:document.querySelector(options)}),"string"==typeof options.container&&(options.container=document.querySelector(options.container)),options instanceof HTMLElement&&(options={tolerance:0,container:options}),!options.container)throw new Error("You should specify a container element");var containerRect=options.container.getBoundingClientRect();return el.offsetTop+el.clientHeight-options.tolerance>options.container.scrollTop&&el.offsetLeft+el.clientWidth-options.tolerance>options.container.scrollLeft&&el.offsetLeft+options.tolerance<containerRect.width+options.container.scrollLeft&&el.offsetTop+options.tolerance<containerRect.height+options.container.scrollTop}function eventHandler(){var trackedElements=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},options=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{tolerance:0},selectors=Object.keys(trackedElements),testVisibility=void 0;selectors.length&&(testVisibility=options.container===window?inViewport:inContainer,selectors.forEach(function(selector){trackedElements[selector].nodes.forEach(function(item){if(testVisibility(item.node,options)?(item.wasVisible=item.isVisible,item.isVisible=!0):(item.wasVisible=item.isVisible,item.isVisible=!1),item.isVisible===!0&&item.wasVisible===!1){if(!trackedElements[selector].enter)return;Object.keys(trackedElements[selector].enter).forEach(function(callback){"function"==typeof trackedElements[selector].enter[callback]&&trackedElements[selector].enter[callback](item.node,"enter")})}if(item.isVisible===!1&&item.wasVisible===!0){if(!trackedElements[selector].leave)return;Object.keys(trackedElements[selector].leave).forEach(function(callback){"function"==typeof trackedElements[selector].leave[callback]&&trackedElements[selector].leave[callback](item.node,"leave")})}})}))}function debouncedScroll(){var _this=this,timeout=void 0;return function(){clearTimeout(timeout),timeout=setTimeout(function(){eventHandler(_this.trackedElements,_this.options)},_this.options.debounce)}}function destroy(){this.options.container.removeEventListener("scroll",this._scroll),window.removeEventListener("resize",this._scroll),this.attached=!1}function off(event,selector,handler){var enterCallbacks=Object.keys(this.trackedElements[selector].enter||{}),leaveCallbacks=Object.keys(this.trackedElements[selector].leave||{});if({}.hasOwnProperty.call(this.trackedElements,selector))if(handler){if(this.trackedElements[selector][event]){var callbackName="function"==typeof handler?handler.name:handler;delete this.trackedElements[selector][event][callbackName]}}else delete this.trackedElements[selector][event];enterCallbacks.length||leaveCallbacks.length||delete this.trackedElements[selector]}function on(event,selector,callback){var allowed=["enter","leave"];if(!event)throw new Error("No event given. Choose either enter or leave");if(!selector)throw new Error("No selector to track");if(allowed.indexOf(event)<0)throw new Error(event+" event is not supported");({}).hasOwnProperty.call(this.trackedElements,selector)||(this.trackedElements[selector]={}),this.trackedElements[selector].nodes=[];for(var i=0,elems=document.querySelectorAll(selector);i<elems.length;i++){var item={isVisible:!1,wasVisible:!1,node:elems[i]};this.trackedElements[selector].nodes.push(item)}"function"==typeof callback&&(this.trackedElements[selector][event]||(this.trackedElements[selector][event]={}),this.trackedElements[selector][event][callback.name||"anonymous"]=callback)}function observeDOM(obj,callback){var MutationObserver=window.MutationObserver||window.WebKitMutationObserver;if(MutationObserver){var obs=new MutationObserver(callback);obs.observe(obj,{childList:!0,subtree:!0})}else obj.addEventListener("DOMNodeInserted",callback,!1),obj.addEventListener("DOMNodeRemoved",callback,!1)}function OnScreen(){var _this=this,options=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{tolerance:0,debounce:100,container:window};this.options={},this.trackedElements={},Object.defineProperties(this.options,{container:{configurable:!1,enumerable:!1,get:function(){var container=void 0;return"string"==typeof options.container?container=document.querySelector(options.container):options.container instanceof HTMLElement&&(container=options.container),container||window},set:function(value){options.container=value}},debounce:{get:function(){return parseInt(options.debounce,10)||100},set:function(value){options.debounce=value}},tolerance:{get:function(){return parseInt(options.tolerance,10)||0},set:function(value){options.tolerance=value}}}),Object.defineProperty(this,"_scroll",{enumerable:!1,configurable:!1,writable:!1,value:this._debouncedScroll.call(this)}),observeDOM(document.querySelector("body"),function(){Object.keys(_this.trackedElements).forEach(function(element){_this.on("enter",element),_this.on("leave",element)})}),this.attach()}return Object.defineProperties(OnScreen.prototype,{_debouncedScroll:{configurable:!1,writable:!1,enumerable:!1,value:debouncedScroll},attach:{configurable:!1,writable:!1,enumerable:!1,value:attach},destroy:{configurable:!1,writable:!1,enumerable:!1,value:destroy},off:{configurable:!1,writable:!1,enumerable:!1,value:off},on:{configurable:!1,writable:!1,enumerable:!1,value:on}}),OnScreen.check=inViewport,OnScreen}); | ||
| !function(global,factory){"object"==typeof exports&&"undefined"!=typeof module?module.exports=factory():"function"==typeof define&&define.amd?define(factory):global.OnScreen=factory()}(this,function(){"use strict";function attach(){var container=this.options.container;if(container instanceof HTMLElement){var style=window.getComputedStyle(container);"static"===style.position&&(container.style.position="relative")}container.addEventListener("scroll",this._scroll,{passive:!0}),window.addEventListener("resize",this._scroll,{passive:!0}),this._scroll(),this.attached=!0}function inViewport(el){var options=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{tolerance:0};if(!el)throw new Error("You should specify the element you want to test");"string"==typeof el&&(el=document.querySelector(el));var elRect=el.getBoundingClientRect();return elRect.bottom-options.tolerance>0&&elRect.right-options.tolerance>0&&elRect.left+options.tolerance<(window.innerWidth||document.documentElement.clientWidth)&&elRect.top+options.tolerance<(window.innerHeight||document.documentElement.clientHeight)}function inContainer(el){var options=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{tolerance:0,container:""};if(!el)throw new Error("You should specify the element you want to test");if("string"==typeof el&&(el=document.querySelector(el)),"string"==typeof options&&(options={tolerance:0,container:document.querySelector(options)}),"string"==typeof options.container&&(options.container=document.querySelector(options.container)),options instanceof HTMLElement&&(options={tolerance:0,container:options}),!options.container)throw new Error("You should specify a container element");var containerRect=options.container.getBoundingClientRect();return el.offsetTop+el.clientHeight-options.tolerance>options.container.scrollTop&&el.offsetLeft+el.clientWidth-options.tolerance>options.container.scrollLeft&&el.offsetLeft+options.tolerance<containerRect.width+options.container.scrollLeft&&el.offsetTop+options.tolerance<containerRect.height+options.container.scrollTop}function eventHandler(){var trackedElements=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},options=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{tolerance:0},selectors=Object.keys(trackedElements),testVisibility=void 0;selectors.length&&(testVisibility=options.container===window?inViewport:inContainer,selectors.forEach(function(selector){trackedElements[selector].nodes.forEach(function(item){if(testVisibility(item.node,options)?(item.wasVisible=item.isVisible,item.isVisible=!0):(item.wasVisible=item.isVisible,item.isVisible=!1),item.isVisible===!0&&item.wasVisible===!1){if(!trackedElements[selector].enter)return;Object.keys(trackedElements[selector].enter).forEach(function(callback){"function"==typeof trackedElements[selector].enter[callback]&&trackedElements[selector].enter[callback](item.node,"enter")})}if(item.isVisible===!1&&item.wasVisible===!0){if(!trackedElements[selector].leave)return;Object.keys(trackedElements[selector].leave).forEach(function(callback){"function"==typeof trackedElements[selector].leave[callback]&&trackedElements[selector].leave[callback](item.node,"leave")})}})}))}function debouncedScroll(){var _this=this,timeout=void 0;return function(){clearTimeout(timeout),timeout=setTimeout(function(){eventHandler(_this.trackedElements,_this.options)},_this.options.debounce)}}function destroy(){this.options.container.removeEventListener("scroll",this._scroll),window.removeEventListener("resize",this._scroll),this.attached=!1}function off(event,selector,handler){var enterCallbacks=Object.keys(this.trackedElements[selector].enter||{}),leaveCallbacks=Object.keys(this.trackedElements[selector].leave||{});if({}.hasOwnProperty.call(this.trackedElements,selector))if(handler){if(this.trackedElements[selector][event]){var callbackName="function"==typeof handler?handler.name:handler;delete this.trackedElements[selector][event][callbackName]}}else delete this.trackedElements[selector][event];enterCallbacks.length||leaveCallbacks.length||delete this.trackedElements[selector]}function on(event,selector,callback){var allowed=["enter","leave"];if(!event)throw new Error("No event given. Choose either enter or leave");if(!selector)throw new Error("No selector to track");if(allowed.indexOf(event)<0)throw new Error(event+" event is not supported");({}).hasOwnProperty.call(this.trackedElements,selector)||(this.trackedElements[selector]={}),this.trackedElements[selector].nodes=[];for(var i=0,elems=document.querySelectorAll(selector);i<elems.length;i++){var item={isVisible:!1,wasVisible:!1,node:elems[i]};this.trackedElements[selector].nodes.push(item)}"function"==typeof callback&&(this.trackedElements[selector][event]||(this.trackedElements[selector][event]={}),this.trackedElements[selector][event][callback.name||"anonymous"]=callback)}function observeDOM(obj,callback){var MutationObserver=window.MutationObserver||window.WebKitMutationObserver;if(MutationObserver){var obs=new MutationObserver(callback);obs.observe(obj,{childList:!0,subtree:!0})}else obj.addEventListener("DOMNodeInserted",callback,!1),obj.addEventListener("DOMNodeRemoved",callback,!1)}function OnScreen(){var _this=this,options=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{tolerance:0,debounce:100,container:window};this.options={},this.trackedElements={},Object.defineProperties(this.options,{container:{configurable:!1,enumerable:!1,get:function(){var container=void 0;return"string"==typeof options.container?container=document.querySelector(options.container):options.container instanceof HTMLElement&&(container=options.container),container||window},set:function(value){options.container=value}},debounce:{get:function(){return parseInt(options.debounce,10)||100},set:function(value){options.debounce=value}},tolerance:{get:function(){return parseInt(options.tolerance,10)||0},set:function(value){options.tolerance=value}}}),Object.defineProperty(this,"_scroll",{enumerable:!1,configurable:!1,writable:!1,value:this._debouncedScroll.call(this)}),observeDOM(document.querySelector("body"),function(){Object.keys(_this.trackedElements).forEach(function(element){_this.on("enter",element),_this.on("leave",element)})}),this.attach()}return Object.defineProperties(OnScreen.prototype,{_debouncedScroll:{configurable:!1,writable:!1,enumerable:!1,value:debouncedScroll},attach:{configurable:!1,writable:!1,enumerable:!1,value:attach},destroy:{configurable:!1,writable:!1,enumerable:!1,value:destroy},off:{configurable:!1,writable:!1,enumerable:!1,value:off},on:{configurable:!1,writable:!1,enumerable:!1,value:on}}),OnScreen.check=inViewport,OnScreen}); | ||
| //# sourceMappingURL=dist/on-screen.umd.min.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"dist/on-screen.umd.min.js","sources":["dist/on-screen.umd.js"],"names":["global","factory","exports","module","define","amd","OnScreen","this","attach","container","options","HTMLElement","style","window","getComputedStyle","position","addEventListener","_scroll","attached","inViewport","el","arguments","length","undefined","tolerance","Error","document","querySelector","elRect","getBoundingClientRect","bottom","right","left","innerWidth","documentElement","clientWidth","top","innerHeight","clientHeight","inContainer","containerRect","offsetTop","scrollTop","offsetLeft","scrollLeft","width","height","eventHandler","trackedElements","selectors","Object","keys","testVisibility","forEach","selector","nodes","item","node","wasVisible","isVisible","enter","callback","leave","debouncedScroll","_this","timeout","clearTimeout","setTimeout","debounce","destroy","removeEventListener","off","event","handler","enterCallbacks","leaveCallbacks","hasOwnProperty","call","callbackName","name","on","allowed","indexOf","i","elems","querySelectorAll","push","observeDOM","obj","MutationObserver","WebKitMutationObserver","obs","observe","childList","subtree","defineProperties","configurable","enumerable","get","set","value","parseInt","defineProperty","writable","_debouncedScroll","element","prototype","check"],"mappings":"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"} | ||
| {"version":3,"file":"dist/on-screen.umd.min.js","sources":["dist/on-screen.umd.js"],"names":["global","factory","exports","module","define","amd","OnScreen","this","attach","container","options","HTMLElement","style","window","getComputedStyle","position","addEventListener","_scroll","passive","attached","inViewport","el","arguments","length","undefined","tolerance","Error","document","querySelector","elRect","getBoundingClientRect","bottom","right","left","innerWidth","documentElement","clientWidth","top","innerHeight","clientHeight","inContainer","containerRect","offsetTop","scrollTop","offsetLeft","scrollLeft","width","height","eventHandler","trackedElements","selectors","Object","keys","testVisibility","forEach","selector","nodes","item","node","wasVisible","isVisible","enter","callback","leave","debouncedScroll","_this","timeout","clearTimeout","setTimeout","debounce","destroy","removeEventListener","off","event","handler","enterCallbacks","leaveCallbacks","hasOwnProperty","call","callbackName","name","on","allowed","indexOf","i","elems","querySelectorAll","push","observeDOM","obj","MutationObserver","WebKitMutationObserver","obs","observe","childList","subtree","defineProperties","configurable","enumerable","get","set","value","parseInt","defineProperty","writable","_debouncedScroll","element","prototype","check"],"mappings":"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"} |
@@ -17,4 +17,4 @@ /** | ||
| container.addEventListener('scroll', this._scroll); | ||
| window.addEventListener('resize', this._scroll); | ||
| container.addEventListener('scroll', this._scroll, { passive: true }); | ||
| window.addEventListener('resize', this._scroll, { passive: true }); | ||
| this._scroll(); | ||
@@ -21,0 +21,0 @@ this.attached = true; |
+3
-3
| { | ||
| "name": "onscreen", | ||
| "version": "1.3.2", | ||
| "version": "1.3.3", | ||
| "description": "A light library that does stuff when the matched elements enter or leave the viewport", | ||
@@ -44,7 +44,7 @@ "main": "dist/on-screen.umd.js", | ||
| "eslint-plugin-import": "1.12.0", | ||
| "karma": "^1.1.2", | ||
| "karma": "^1.7.1", | ||
| "karma-chai": "^0.1.0", | ||
| "karma-coverage": "^1.1.1", | ||
| "karma-mocha": "^1.1.1", | ||
| "karma-mocha-reporter": "^2.1.0", | ||
| "karma-mocha-reporter": "^2.2.5", | ||
| "karma-phantomjs-launcher": "^1.0.1", | ||
@@ -51,0 +51,0 @@ "karma-rollup-plugin": "^0.2.1", |
134165
25.79%23
15%1701
63.87%