{"version":3,"sources":["webpack://ScrollTrigger/webpack/universalModuleDefinition","webpack://ScrollTrigger/webpack/bootstrap","webpack://ScrollTrigger/./node_modules/object-extend/lib/extend.js","webpack://ScrollTrigger/./src/extensions/Array.js","webpack://ScrollTrigger/./src/config/DefaultOptions.js","webpack://ScrollTrigger/./src/scripts/Trigger.js","webpack://ScrollTrigger/./src/scripts/TriggerCollection.js","webpack://ScrollTrigger/./src/scripts/ScrollAnimationLoop.js","webpack://ScrollTrigger/./src/ScrollTrigger.js"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","extend","a","b","keys","forEach","toString","Array","each","fn","this","length","e","NodeList","filter","trigger","once","offset","viewport","x","y","element","toggle","class","in","out","callback","visible","scroll","sustain","start","stop","directionChange","isInt","Number","isFloat","Trigger","options","DefaultOptions","active","parent","direction","parentFrame","w","offsetWidth","innerWidth","h","offsetHeight","innerHeight","rect","getBounds","_checkVisibility","response","_toggleCallback","Promise","then","_toggleClass","console","error","getBoundingClientRect","width","height","elementOffset","_getElementOffset","viewportOffset","_getViewportOffset","left","top","isArray","className","classList","add","remove","TriggerCollection","triggers","objects","push","hit","selector","parentNode","slice","querySelectorAll","indexOf","found","el","ScrollAnimationLoop","_parseOptions","position","getPosition","lastAction","_getTimestamp","_startRun","_boundListener","_didScroll","addEventListener","defaults","startCallback","stopCallback","newPosition","newDirection","running","_loop","pageXOffset","scrollLeft","document","documentElement","pageYOffset","scrollTop","Date","now","_stopRun","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","oRequestAnimationFrame","setTimeout","_tick","removeEventListener","_Trigger","_TriggerCollection","_ScrollAnimationLoop","ScrollTrigger","_initCollection","_initLoop","defaultTrigger","scrollOptions","scrollAttributes","elements","createTriggers","collection","loop","_scrollCallback","_scrollStart","_scrollStop","_scrollDirectionChange","checkVisibility","createTrigger","HTMLElement","search","query","kill"],"mappings":"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","file":"ScrollTrigger.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"ScrollTrigger\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ScrollTrigger\"] = factory();\n\telse\n\t\troot[\"ScrollTrigger\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n","/*!\n * object-extend\n * A well-tested function to deep extend (or merge) JavaScript objects without further dependencies.\n *\n * http://github.com/bernhardw\n *\n * Copyright 2013, Bernhard Wanger \n * Released under the MIT license.\n *\n * Date: 2013-04-10\n */\n\n\n/**\n * Extend object a with object b.\n *\n * @param {Object} a Source object.\n * @param {Object} b Object to extend with.\n * @returns {Object} a Extended object.\n */\nmodule.exports = function extend(a, b) {\n\n // Don't touch 'null' or 'undefined' objects.\n if (a == null || b == null) {\n return a;\n }\n\n // TODO: Refactor to use for-loop for performance reasons.\n Object.keys(b).forEach(function (key) {\n\n // Detect object without array, date or null.\n // TODO: Performance test:\n // a) b.constructor === Object.prototype.constructor\n // b) Object.prototype.toString.call(b) == '[object Object]'\n if (Object.prototype.toString.call(b[key]) == '[object Object]') {\n if (Object.prototype.toString.call(a[key]) != '[object Object]') {\n a[key] = b[key];\n } else {\n a[key] = extend(a[key], b[key]);\n }\n } else {\n a[key] = b[key];\n }\n\n });\n\n return a;\n\n};","/**\n * Faster than .forEach\n * @param {(function())} fn The function to call\n */\nArray.prototype.each = function (fn) {\n\tconst l = this.length\n\n\tfor(let i = 0; i < l; i++) {\n\t\tconst e = this[i]\n\n\t\tif (e) {\n\t\t\tfn(e,i)\n\t\t}\n\t}\n}\n\n/**\n * Give NodeList some Array functions\n */\nNodeList.prototype.each = Array.prototype.each\nNodeList.prototype.filter = Array.prototype.filter\n","/**\n * Default options for ScrollTrigger\n */\nexport default function() {\n\t/**\n\t * The default options for a trigger\n\t *\n\t * @type {\n\t * {\n\t * once: boolean,\n\t * offset: {\n\t * viewport: {\n\t * x: number|(function(frame, direction)),\n\t * y: number|(function(frame, direction))\n\t * },\n\t * element: {\n\t * x: number|(function(rect, direction)),\n\t * y: number|(function(rect, direction))\n\t * }\n\t * },\n\t * toggle: {\n\t * class: {\n\t * in: string|string[],\n\t * out: string|string[]\n\t * },\n\t * callback: {\n\t * in: {TriggerInCallback},\n * visible: (function()),\n\t * out: (function())\n\t * }\n\t * }\n\t * }}\n\t */\n\tthis.trigger = {\n\t\tonce: false,\n\t\toffset: {\n\t\t\tviewport: {\n\t\t\t\tx: 0,\n\t\t\t\ty: 0\n\t\t\t},\n\t\t\telement: {\n\t\t\t\tx: 0,\n\t\t\t\ty: 0\n\t\t\t}\n\t\t},\n\t\ttoggle: {\n\t\t\tclass: {\n\t\t\t\tin: 'visible',\n\t\t\t\tout: 'invisible'\n\t\t\t},\n\t\t\tcallback: {\n\t\t\t\tin: null,\n \t\tvisible: null,\n\t\t\t\tout: null\n\t\t\t}\n\t\t}\n\t}\n\n /**\n * The `in` callback is called when the element enters the viewport\n * @callback TriggerInCallback\n * @param {{x: Number, y: Number}} position\n * @param {string} direction\n */\n\n\t/**\n\t * The default options for the scroll behaviour\n\t * @type {\n\t * {\n\t * sustain: number,\n\t * element: Window|HTMLDocument|HTMLElement,\n\t * callback: {ScrollCallback},\n\t * start: (function()),\n\t * stop: (function()),\n\t * directionChange: (function(direction: {string}))\n\t * }\n\t * }\n\t */\n\tthis.scroll = {\n\t\tsustain: 300,\n\t\telement: window,\n\t\tcallback: () => {},\n\t\tstart: () => {},\n\t\tstop: () => {},\n\t\tdirectionChange: () => {}\n\t}\n\n /**\n * The scroll callback is called when the user scrolls\n * @callback ScrollCallback\n * @param {{x: Number, y: Number}} position\n * @param {string} direction\n */\n}\n","import DefaultOptions from '../config/DefaultOptions'\nimport extend from 'object-extend'\nimport '../extensions/Array'\n\nfunction isInt(n) {\n\treturn Number(n) === n && n % 1 === 0\n}\n\nfunction isFloat(n) {\n\treturn Number(n) === n && n % 1 !== 0\n}\n\nexport default class Trigger {\n\t/**\n\t * Creates a new Trigger from the given element and options\n\t *\n\t * @param {Element|HTMLElement} element\n\t * @param {DefaultOptions.trigger} [options=DefaultOptions.trigger] options\n\t */\n\tconstructor(element, options) {\n\t\tthis.element = element\n\n\t\toptions = extend(new DefaultOptions().trigger, options)\n\n\t\tthis.offset = options.offset\n\t\tthis.toggle = options.toggle\n\t\tthis.once = options.once\n\t\tthis.visible = null\n\t\tthis.active = true\n\t}\n\n\t/**\n\t * Checks if the Trigger is in the viewport, calls the callbacks and toggles the classes\n\t * @param {HTMLElement|HTMLDocument|Window} parent\n\t * @param {string} direction top, bottom, left, right\n\t * @returns {boolean} If the element is visible\n\t */\n\tcheckVisibility(parent, direction) {\n\t\tif (!this.active) {\n\t\t\treturn this.visible\n\t\t}\n\n\t\tconst parentWidth = parent.offsetWidth || parent.innerWidth || 0\n\t\tconst parentHeight = parent.offsetHeight || parent.innerHeight || 0\n\n\t\tconst parentFrame = { w: parentWidth, h: parentHeight }\n\t\tconst rect = this.getBounds()\n\n\t\tconst visible = this._checkVisibility(rect, parentFrame, direction)\n\n\t\tif (visible !== this.visible) {\n\t\t\tthis.visible = visible\n\n\t\t\tconst response = this._toggleCallback()\n\n\t\t\tif (response instanceof Promise) {\n\t\t\t\t\tresponse.then(this._toggleClass.bind(this)).catch(e => {\n\t\t\t\t\t\tconsole.error('Trigger promise failed')\n\t\t\t\t\t\tconsole.error(e)\n\t\t\t\t\t})\n\t\t\t} else {\n\t\t\t\t\tthis._toggleClass()\n\t\t\t}\n\n\t\t\tif (this.visible && this.once) {\n\t\t\t\tthis.active = false\n\t\t\t}\n\t\t} else if (visible) {\n\t\t\t\tif (typeof this.toggle.callback.visible == 'function') {\n\t\t\t\t\t\treturn this.toggle.callback.visible.call(this.element, this)\n\t\t\t\t}\n\t\t}\n\n\t\treturn visible\n\t}\n\n\t/**\n\t * Get the bounds of this element\n\t * @return {ClientRect | DOMRect}\n\t */\n\tgetBounds() {\n \treturn this.element.getBoundingClientRect()\n\t}\n\n\t/**\n\t * Get the calculated offset to place on the element\n\t * @param {ClientRect} rect\n\t * @param {string} direction top, bottom, left, right\n\t * @returns {{x: number, y: number}}\n\t * @private\n\t */\n\t_getElementOffset(rect, direction) {\n\t\tlet offset = { x: 0, y: 0 }\n\n\t\tif (typeof this.offset.element.x === 'function') {\n\t\t\toffset.x = rect.width * this.offset.element.x(this, rect, direction)\n\t\t} else if (isFloat(this.offset.element.x)) {\n\t\t\toffset.x = rect.width * this.offset.element.x\n\t\t} else if (isInt(this.offset.element.x)) {\n\t\t\toffset.x = this.offset.element.x\n\t\t}\n\n\t\tif (typeof this.offset.element.y === 'function') {\n\t\t\toffset.y = rect.height * this.offset.element.y(this, rect, direction)\n\t\t} else if (isFloat(this.offset.element.y)) {\n\t\t\toffset.y = rect.height * this.offset.element.y\n\t\t} else if (isInt(this.offset.element.y)) {\n\t\t\toffset.y = this.offset.element.y\n\t\t}\n\n\t\treturn offset\n\t}\n\n\t/**\n\t * Get the calculated offset to place on the viewport\n\t * @param {{w: number, h: number}} parent\n\t * @param {string} direction top, bottom, left, right\n\t * @returns {{x: number, y: number}}\n\t * @private\n\t */\n\t_getViewportOffset(parent, direction) {\n\t\tlet offset = { x: 0, y: 0 }\n\n\t\tif (typeof this.offset.viewport.x === 'function') {\n\t\t\toffset.x = parent.w * this.offset.viewport.x(this, parent, direction)\n\t\t} else if (isFloat(this.offset.viewport.x)) {\n\t\t\toffset.x = parent.w * this.offset.viewport.x\n\t\t} else if (isInt(this.offset.viewport.x)) {\n\t\t\toffset.x = this.offset.viewport.x\n\t\t}\n\n\t\tif (typeof this.offset.viewport.y === 'function') {\n\t\t\toffset.y = parent.h * this.offset.viewport.y(this, parent, direction)\n\t\t} else if (isFloat(this.offset.viewport.y)) {\n\t\t\toffset.y = parent.h * this.offset.viewport.y\n\t\t} else if (isInt(this.offset.viewport.y)) {\n\t\t\toffset.y = this.offset.viewport.y\n\t\t}\n\n\t\treturn offset\n\t}\n\n\t/**\n\t * Check the visibility of the trigger in the viewport, with offsets applied\n\t * @param {ClientRect} rect\n\t * @param {{w: number, h: number}} parent\n\t * @param {string} direction top, bottom, left, right\n\t * @returns {boolean}\n\t * @private\n\t */\n\t _checkVisibility(rect, parent, direction) {\n\t\tconst elementOffset = this._getElementOffset(rect, direction)\n\t\tconst viewportOffset = this._getViewportOffset(parent, direction)\n\n\t\tlet visible = true\n\n\t\tif ((rect.left - viewportOffset.x) < -(rect.width - elementOffset.x)) {\n\t\t\tvisible = false\n\t\t}\n\n\t\tif ((rect.left + viewportOffset.x) > (parent.w - elementOffset.x)) {\n\t\t\tvisible = false\n\t\t}\n\n\t\tif ((rect.top - viewportOffset.y) < -(rect.height - elementOffset.y)) {\n\t\t\tvisible = false\n\t\t}\n\n\t\tif ((rect.top + viewportOffset.y) > (parent.h - elementOffset.y)) {\n\t\t\tvisible = false\n\t\t}\n\n\t\treturn visible\n\t}\n\n\t/**\n\t * Toggles the classes\n\t * @private\n\t */\n\t_toggleClass() {\n\t\tif (this.visible) {\n\t\t\tif (Array.isArray(this.toggle.class.in)) {\n\t\t\t\tthis.toggle.class.in.each((className) => {\n\t\t\t\t\tthis.element.classList.add(className)\n\t\t\t\t})\n\t\t\t} else {\n \tthis.element.classList.add(this.toggle.class.in)\n }\n\n if (Array.isArray(this.toggle.class.out)) {\n \tthis.toggle.class.out.each((className) => {\n \tthis.element.classList.remove(className)\n })\n } else {\n \tthis.element.classList.remove(this.toggle.class.out)\n }\n\n return\n\t\t}\n\n\t\tif (Array.isArray(this.toggle.class.in)) {\n\t\t\tthis.toggle.class.in.each((className) => {\n\t\t\t\tthis.element.classList.remove(className)\n\t\t\t})\n\t\t} else {\n\t\t\tthis.element.classList.remove(this.toggle.class.in)\n }\n\n\t\tif (Array.isArray(this.toggle.class.out)) {\n\t\t\tthis.toggle.class.out.each((className) => {\n\t\t\t\tthis.element.classList.add(className)\n\t\t\t})\n\t\t} else {\n \tthis.element.classList.add(this.toggle.class.out)\n }\n\t}\n\n\t/**\n\t * Toggles the callback\n\t * @private\n\t * @return null|Promise\n\t */\n\t_toggleCallback() {\n\t\tif (this.visible) {\n\t\t\tif (typeof this.toggle.callback.in == 'function') {\n\t\t\t\treturn this.toggle.callback.in.call(this.element, this)\n\t\t\t}\n\t\t} else {\n\t\t\tif (typeof this.toggle.callback.out == 'function') {\n\t\t\t\treturn this.toggle.callback.out.call(this.element, this)\n\t\t\t}\n\t\t}\n\t}\n}\n","import Trigger from './Trigger'\nimport '../extensions/Array'\n\nexport default class TriggerCollection {\n\t/**\n\t * Initializes the collection\n\t * @param {Trigger[]} [triggers=[]] triggers A set of triggers to init with, optional\n\t */\n\tconstructor(triggers) {\n\t\t/**\n\t\t * @member {Trigger[]}\n\t\t */\n\t\tthis.triggers = triggers instanceof Array ? triggers : []\n\t}\n\n\t/**\n\t * Adds one or multiple Trigger objects\n\t * @param {Trigger|Trigger[]} objects\n\t */\n\tadd(objects) {\n\t\tif (objects instanceof Trigger) {\n\t\t\t// single\n\t\t\treturn this.triggers.push(objects)\n\t\t}\n\n\t\tobjects.each((trigger) => {\n\t\t\tif (trigger instanceof Trigger) {\n\t\t\t\tthis.triggers.push(trigger)\n\t\t\t} else {\n\t\t\t\tconsole.error('Object added to TriggerCollection is not a Trigger. Object: ', trigger)\n\t\t\t}\n\t\t})\n\t}\n\n\t/**\n\t * Removes one or multiple Trigger objects\n\t * @param {Trigger|Trigger[]} objects\n\t */\n\tremove(objects) {\n\t\tif (objects instanceof Trigger) {\n\t\t\tobjects = [objects]\n\t\t}\n\n\t\tthis.triggers = this.triggers.filter((trigger) => {\n\t\t\tlet hit = false\n\n\t\t\tobjects.each((object) => {\n\t\t\t\tif (object == trigger) {\n\t\t\t\t\thit = true\n\t\t\t\t}\n\t\t\t})\n\n\t\t\treturn !hit\n\t\t})\n\t}\n\n\t/**\n\t * Lookup one or multiple triggers by a query string\n\t * @param {string} selector\n\t * @returns {Trigger[]}\n\t */\n\tquery(selector) {\n\t\treturn this.triggers.filter((trigger) => {\n\t\t\tconst element = trigger.element\n\t\t\tconst parent = element.parentNode\n\t\t\tconst nodes = [].slice.call(parent.querySelectorAll(selector))\n\n\t\t\treturn nodes.indexOf(element) > -1\n\t\t})\n\t}\n\n\t/**\n\t * Lookup one or multiple triggers by a certain HTMLElement or NodeList\n\t * @param {HTMLElement|HTMLElement[]|NodeList} element\n\t * @returns {Trigger|Trigger[]|null}\n\t */\n\tsearch(element) {\n\t\tconst found = this.triggers.filter((trigger) => {\n\t\t\tif (element instanceof NodeList || Array.isArray(element)) {\n\t\t\t\tlet hit = false\n\n\t\t\t\telement.each((el) => {\n\t\t\t\t\tif (trigger.element == el) {\n\t\t\t\t\t\thit = true\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\treturn hit\n\t\t\t}\n\n\t\t\treturn trigger.element == element\n\t\t})\n\n\t\treturn found.length == 0 ? null : (found.length > 1 ? found : found[0])\n\t}\n\n\t/**\n\t * Calls a function on all triggers\n\t * @param {(function())} callback\n\t */\n\tcall(callback) {\n\t\tthis.triggers.each(callback)\n\t}\n}\n","import DefaultOptions from '../config/DefaultOptions'\nimport extend from 'object-extend'\nimport '../extensions/Array'\n\nexport default class ScrollAnimationLoop {\n\t/**\n\t * ScrollAnimationLoop constructor.\n\t * Starts a requestAnimationFrame loop as long as the user has scrolled the scrollElement. Stops after a certain time.\n\t *\n\t * @param {DefaultOptions.scroll} [options=DefaultOptions.scroll] options The options for the loop\n\t * @param {ScrollCallback} callback [loop=null] The loop callback\n\t */\n\tconstructor(options, callback) {\n\t\tthis._parseOptions(options)\n\n\t\tif (typeof callback === 'function') {\n\t\t\tthis.callback = callback\n\t\t}\n\n\t\tthis.direction = 'none'\n\t\tthis.position = this.getPosition()\n\t\tthis.lastAction = this._getTimestamp()\n\n\t\tthis._startRun()\n\n\t\tthis._boundListener = this._didScroll.bind(this)\n\t\tthis.element.addEventListener('scroll', this._boundListener)\n\t}\n\n\t/**\n\t * Parses the options\n\t *\n\t * @param {DefaultOptions.scroll} [options=DefaultOptions.scroll] options The options for the loop\n\t * @private\n\t */\n\t_parseOptions(options) {\n\t\tlet defaults = new DefaultOptions().scroll\n\n\t\tif (typeof options != 'function') {\n\t\t\tdefaults.callback = () => {}\n\n defaults = extend(defaults, options)\n\t\t} else {\n\t\t\tdefaults.callback = options\n\t\t}\n\n\t\tthis.element = defaults.element\n\t\tthis.sustain = defaults.sustain\n\t\tthis.callback = defaults.callback\n\t\tthis.startCallback = defaults.start\n\t\tthis.stopCallback = defaults.stop\n\t\tthis.directionChange = defaults.directionChange\n\t}\n\n\t/**\n\t * Callback when the user scrolled the element\n\t * @private\n\t */\n\t_didScroll() {\n\t\tconst newPosition = this.getPosition()\n\n\t\tif (this.position !== newPosition) {\n\t\t\tlet newDirection = this.direction\n\n\t\t\tif (newPosition.x !== this.position.x) {\n\t\t\t\tnewDirection = newPosition.x > this.position.x ? 'right' : 'left'\n\t\t\t} else if (newPosition.y !== this.position.y) {\n\t\t\t\tnewDirection = newPosition.y > this.position.y ? 'bottom' : 'top'\n\t\t\t} else {\n\t\t\t\tnewDirection = 'none'\n\t\t\t}\n\n\t\t\tif (newDirection !== this.direction) {\n\t\t\t\tthis.direction = newDirection\n\n if (typeof this.directionChange === 'function') {\n this.directionChange(this.direction)\n }\n\t\t\t}\n\n\t\t\tthis.position = newPosition\n\t\t\tthis.lastAction = this._getTimestamp()\n\t\t} else {\n this.direction = 'none'\n }\n\n\t\tif (!this.running) {\n\t\t\tthis._startRun()\n\t\t}\n\t}\n\n\t/**\n\t * Starts the loop, calls the start callback\n\t * @private\n\t */\n\t_startRun() {\n\t\tthis.running = true\n\n if (typeof this.startCallback === 'function') {\n this.startCallback()\n }\n\n\t\tthis._loop()\n\t}\n\n\t/**\n\t * Stops the loop, calls the stop callback\n\t * @private\n\t */\n\t_stopRun() {\n\t\tthis.running = false\n\n if (typeof this.stopCallback === 'function') {\n this.stopCallback()\n }\n\t}\n\n\t/**\n\t * The current position of the element\n\t * @returns {{x: number, y: number}}\n\t */\n\tgetPosition() {\n\t\tconst left = this.element.pageXOffset || this.element.scrollLeft || document.documentElement.scrollLeft || 0\n\t\tconst top = this.element.pageYOffset || this.element.scrollTop || document.documentElement.scrollTop || 0\n\n\t\treturn { x: left, y: top }\n\t}\n\n\t/**\n\t * The current timestamp in ms\n\t * @returns {number}\n\t * @private\n\t */\n\t_getTimestamp() {\n\t\treturn Number(Date.now())\n\t}\n\n\t/**\n\t * One single tick of the animation\n\t * @private\n\t */\n\t_tick() {\n\t\tthis.callback(this.position, this.direction)\n\n\t\tconst now = this._getTimestamp()\n\n\t\tif (now - this.lastAction > this.sustain) {\n\t\t\tthis._stopRun()\n\t\t}\n\n\t\tif (this.running) {\n\t\t\tthis._loop()\n\t\t}\n\t}\n\n\t/**\n\t * Requests an animation frame\n\t * @private\n\t */\n\t_loop() {\n\t\tconst frame = window.requestAnimationFrame ||\n\t\t\twindow.webkitRequestAnimationFrame ||\n\t\t\twindow.mozRequestAnimationFrame ||\n\t\t\twindow.msRequestAnimationFrame ||\n\t\t\twindow.oRequestAnimationFrame ||\n\t\t\t((callback) => { setTimeout(callback, 1000 / 60) })\n\n\t\tframe(this._tick.bind(this))\n\t}\n\n\t/**\n\t * Kills the loop forever\n\t */\n\tkill() {\n\t\tthis.running = false\n\t\tthis.element.removeEventListener('scroll', this._boundListener)\n\t}\n}\n","/*!\n * ScrollTrigger\n *\n *\n * http://github.com/terwanerik\n *\n * Copyright 2017, Erik Terwan \n * Released under the MIT license.\n *\n * Date: 2017-07-09\n */\n\n/**\n * Created by Erik on 09/07/2017.\n */\nimport DefaultOptions from './config/DefaultOptions'\nimport _Trigger from './scripts/Trigger'\nimport _TriggerCollection from './scripts/TriggerCollection'\nimport _ScrollAnimationLoop from './scripts/ScrollAnimationLoop'\n\nimport extend from 'object-extend'\nimport './extensions/Array'\n\nexport const Trigger = _Trigger\nexport const TriggerCollection = _TriggerCollection\nexport const ScrollAnimationLoop = _ScrollAnimationLoop\n\nexport default class ScrollTrigger {\n\t/**\n\t * Constructor for the scroll trigger\n\t * @param {DefaultOptions} [options=DefaultOptions] options\n\t */\n\tconstructor(options) {\n\t\tthis._parseOptions(options)\n\t\tthis._initCollection()\n\t\tthis._initLoop()\n\t}\n\n\t/**\n\t * Parses the options\n\t * @param {DefaultOptions} [options=DefaultOptions] options\n\t * @private\n\t */\n\t_parseOptions(options) {\n\t\toptions = extend(new DefaultOptions(), options)\n\n\t\tthis.defaultTrigger = options.trigger\n\t\tthis.scrollOptions = options.scroll\n\t}\n\n\t/**\n\t * Initializes the collection, picks all [data-scroll] elements as initial elements\n\t * @private\n\t */\n\t_initCollection() {\n\t\tconst scrollAttributes = document.querySelectorAll('[data-scroll]')\n\t\tlet elements = []\n\n\t\tif (scrollAttributes.length > 0) {\n\t\t\telements = this.createTriggers(scrollAttributes)\n\t\t}\n\n\t\tthis.collection = new TriggerCollection(elements)\n\t}\n\n\t/**\n\t * Initializes the scroll loop\n\t * @private\n\t */\n\t_initLoop() {\n\t\tthis.loop = new ScrollAnimationLoop({\n\t\t\tsustain: this.scrollOptions.sustain,\n\t\t\telement: this.scrollOptions.element,\n\t\t\tcallback: (position, direction) => {\n\t\t\t\tthis._scrollCallback(position, direction)\n\t\t\t},\n\t\t\tstart: () => {\n\t\t\t\tthis._scrollStart()\n\t\t\t},\n\t\t\tstop: () => {\n\t\t\t\tthis._scrollStop()\n\t\t\t},\n\t\t\tdirectionChange: (direction) => {\n\t\t\t\tthis._scrollDirectionChange(direction)\n\t\t\t}\n\t\t})\n\t}\n\n\t/**\n\t * Callback for checking triggers\n\t * @param {{x: number, y: number}} position\n\t * @param {string} direction\n\t * @private\n\t */\n\t_scrollCallback(position, direction) {\n\t\tthis.collection.call((trigger) => {\n\t\t\ttrigger.checkVisibility(this.scrollOptions.element, direction)\n\t\t})\n\n\t\tthis.scrollOptions.callback(position, direction)\n\t}\n\n\t/**\n\t * When the scrolling started\n\t * @private\n\t */\n\t_scrollStart() {\n\t\tthis.scrollOptions.start()\n\t}\n\n\t/**\n\t * When the scrolling stopped\n\t * @private\n\t */\n\t_scrollStop() {\n\t\tthis.scrollOptions.stop()\n\t}\n\n\t/**\n\t * When the direction changes\n\t * @param {string} direction\n\t * @private\n\t */\n\t_scrollDirectionChange(direction) {\n\t\tthis.scrollOptions.directionChange(direction)\n\t}\n\n\t/**\n\t * Creates a Trigger object from a given element and optional option set\n\t * @param {HTMLElement} element\n\t * @param {DefaultOptions.trigger} [options=DefaultOptions.trigger] options\n\t * @returns Trigger\n\t */\n\tcreateTrigger(element, options) {\n\t\treturn new Trigger(element, extend(this.defaultTrigger, options))\n\t}\n\n\t/**\n\t * Creates an array of triggers\n\t * @param {HTMLElement[]|NodeList} elements\n\t * @param {Object} [options=null] options\n\t * @returns {Trigger[]} Array of triggers\n\t */\n\tcreateTriggers(elements, options) {\n\t\tlet triggers = []\n\n\t\telements.each((element) => {\n\t\t\ttriggers.push(this.createTrigger(element, options))\n\t\t})\n\n\t\treturn triggers\n\t}\n\n\t/**\n\t * Adds triggers\n\t * @param {string|HTMLElement|NodeList|Trigger|Trigger[]} objects A list of objects or a query\n\t * @param {Object} [options=null] options\n\t * @returns {ScrollTrigger}\n\t */\n\tadd(objects, options) {\n\t\tif (objects instanceof HTMLElement) {\n\t\t\tthis.collection.add(this.createTrigger(objects, options))\n\n\t\t\treturn this\n\t\t}\n\n\t\tif (objects instanceof Trigger) {\n\t\t\tthis.collection.add(objects)\n\n\t\t\treturn this\n\t\t}\n\n\t\tif (objects instanceof NodeList) {\n\t\t\tthis.collection.add(this.createTriggers(objects, options))\n\n\t\t\treturn this\n\t\t}\n\n\t\tif (Array.isArray(objects) && objects.length && objects[0] instanceof Trigger) {\n\t\t\tthis.collection.add(objects)\n\n\t\t\treturn this\n\t\t}\n\n\t\tif (Array.isArray(objects) && objects.length && objects[0] instanceof HTMLElement) {\n\t\t\tthis.collection.add(this.createTriggers(objects, options))\n\n\t\t\treturn this\n\t\t}\n\n\t\t// assume it's a query string\n\t\tthis.collection.add(this.createTriggers(document.querySelectorAll(objects), options))\n\n\t\treturn this\n\t}\n\n\t/**\n\t * Removes triggers\n\t * @param {string|HTMLElement|NodeList|Trigger|Trigger[]} objects A list of objects or a query\n\t * @returns {ScrollTrigger}\n\t */\n\tremove(objects) {\n\t\tif (objects instanceof Trigger) {\n\t\t\tthis.collection.remove(objects)\n\n\t\t\treturn this\n\t\t}\n\n\t\tif (Array.isArray(objects) && objects.length && objects[0] instanceof Trigger) {\n\t\t\tthis.collection.remove(objects)\n\n\t\t\treturn this\n\t\t}\n\n\t\tif (objects instanceof HTMLElement) {\n\t\t\tthis.collection.remove(this.search(objects))\n\n\t\t\treturn this\n\t\t}\n\n\t\tif (Array.isArray(objects) && objects.length && objects[0] instanceof HTMLElement) {\n\t\t\tthis.collection.remove(this.search(objects))\n\n\t\t\treturn this\n\t\t}\n\n\t\tif (objects instanceof NodeList) {\n\t\t\tthis.collection.remove(this.search(objects))\n\n\t\t\treturn this\n\t\t}\n\n\t\tif (Array.isArray(objects) && objects.length && objects[0] instanceof Trigger) {\n\t\t\tthis.collection.remove(objects)\n\n\t\t\treturn this\n\t\t}\n\n\t\t// assume it's a query string\n\t\tthis.collection.remove(this.query(objects.toString()))\n\n\t\treturn this\n\t}\n\n\t/**\n\t * Lookup one or multiple triggers by a query string\n\t * @param {string} selector\n\t * @returns {Trigger[]}\n\t */\n\tquery(selector) {\n\t\treturn this.collection.query(selector)\n\t}\n\n\t/**\n\t * Lookup one or multiple triggers by a certain HTMLElement or NodeList\n\t * @param {HTMLElement|HTMLElement[]|NodeList} element\n\t * @returns {Trigger|Trigger[]|null}\n\t */\n\tsearch(element) {\n\t\treturn this.collection.search(element)\n\t}\n\n\t/**\n\t * Reattaches the scroll listener\n\t */\n\tlisten() {\n\t\tif (this.loop) { return }\n\n\t\tthis._initLoop()\n\t}\n\n\t/**\n\t * Kills the scroll listener\n\t */\n\tkill() {\n\t\tthis.loop.kill()\n\t\tthis.loop = null\n\t}\n}\n"],"sourceRoot":""}