UNPKG

scroll-lazy

Version:
627 lines (497 loc) 14.6 kB
/******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) /******/ return installedModules[moduleId].exports; /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ exports: {}, /******/ id: moduleId, /******/ loaded: false /******/ }; /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ // Flag the module as loaded /******/ module.loaded = true; /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ // Load entry module and return exports /******/ return __webpack_require__(0); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ function(module, exports, __webpack_require__) { var Lazy = __webpack_require__(1) document.addEventListener('DOMContentLoaded', function(event) { Lazy .on(function(next) { console.log('lazy') document.getElementById('loading').style.opacity = 1 setTimeout(function() { var element = document.createElement('div') element.style.background = '#ccc' element.style.margin = 10 element.style.height = Math.random() * 2000 document.body.appendChild(element) document.getElementById('loading').style.opacity = 0 next() },1000) }) .watch({ threshold:function() { return 4 }, scroll:function() { return document.body.scrollTop }, body:function() { var height = document.body.offsetHeight var style = getComputedStyle(document.body) height += parseInt(style.marginTop) + parseInt(style.marginBottom) return height }, container:function() { return window.innerHeight }, }) }) /***/ }, /* 1 */ /***/ function(module, exports, __webpack_require__) { (function webpackUniversalModuleDefinition(root, factory) { if(true) module.exports = factory(); else if(typeof define === 'function' && define.amd) define([], factory); else if(typeof exports === 'object') exports["index"] = factory(); else root["index"] = factory(); })(this, function() { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) /******/ return installedModules[moduleId].exports; /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ exports: {}, /******/ id: moduleId, /******/ loaded: false /******/ }; /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ // Flag the module as loaded /******/ module.loaded = true; /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ // Load entry module and return exports /******/ return __webpack_require__(0); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ function(module, exports, __webpack_require__) { var EventEmitter = __webpack_require__(1) var ee = new EventEmitter() var exports = {} var THRESHOLD = 10 var defaultHandler = { check:function(callback) { callback(null,this.body()-this.container() < this.scroll()+this.threshold()) }, container:function() { return window.innerHeight }, scroll:function() { return document.body.scrollTop }, body:function() { return outerHeight(document.body) } } var outerHeight = function(el) { var height = el.offsetHeight var style = getComputedStyle(el) height += parseInt(style.marginTop) + parseInt(style.marginBottom) return height } var value = function(arg) { if(typeof arg === 'undefined') { return value.apply(value,Array.prototype.slice.call(arguments,1)) } else if(typeof arg === 'function') { return arg } else { return function() { return arg } } } var _loop = function() { this.check(function(err,isLazy) { if(err) { ee.emit('error',err) return } if(isLazy) { window.removeEventListener('scroll',loop) ee.emit('lazy',function(err) { window.addEventListener('scroll',loop) loop() }) } }) } var loop = _loop.bind(exports) var watch = function(opt) { if(!opt) opt = {} this.opt = opt this.check = value(opt.check,defaultHandler.check.bind(this)) this.container = value(opt.container,defaultHandler.container.bind(this)) this.scroll = value(opt.scroll,defaultHandler.scroll.bind(this)) this.body = value(opt.body,defaultHandler.body.bind(this)) this.threshold = value(opt.threshold,THRESHOLD) window.addEventListener('scroll',loop) loop() return this } var on = function(listener) { this.listener = listener ee.on('lazy',listener) return this } var off = function(listener) { ee.off('lazy',listener||this.listener) return this } exports.watch = watch.bind(exports) exports.on = on.bind(exports) exports.off = off.bind(exports) module.exports = exports /***/ }, /* 1 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var d = __webpack_require__(2) , callable = __webpack_require__(15) , apply = Function.prototype.apply, call = Function.prototype.call , create = Object.create, defineProperty = Object.defineProperty , defineProperties = Object.defineProperties , hasOwnProperty = Object.prototype.hasOwnProperty , descriptor = { configurable: true, enumerable: false, writable: true } , on, once, off, emit, methods, descriptors, base; on = function (type, listener) { var data; callable(listener); if (!hasOwnProperty.call(this, '__ee__')) { data = descriptor.value = create(null); defineProperty(this, '__ee__', descriptor); descriptor.value = null; } else { data = this.__ee__; } if (!data[type]) data[type] = listener; else if (typeof data[type] === 'object') data[type].push(listener); else data[type] = [data[type], listener]; return this; }; once = function (type, listener) { var once, self; callable(listener); self = this; on.call(this, type, once = function () { off.call(self, type, once); apply.call(listener, this, arguments); }); once.__eeOnceListener__ = listener; return this; }; off = function (type, listener) { var data, listeners, candidate, i; callable(listener); if (!hasOwnProperty.call(this, '__ee__')) return this; data = this.__ee__; if (!data[type]) return this; listeners = data[type]; if (typeof listeners === 'object') { for (i = 0; (candidate = listeners[i]); ++i) { if ((candidate === listener) || (candidate.__eeOnceListener__ === listener)) { if (listeners.length === 2) data[type] = listeners[i ? 0 : 1]; else listeners.splice(i, 1); } } } else { if ((listeners === listener) || (listeners.__eeOnceListener__ === listener)) { delete data[type]; } } return this; }; emit = function (type) { var i, l, listener, listeners, args; if (!hasOwnProperty.call(this, '__ee__')) return; listeners = this.__ee__[type]; if (!listeners) return; if (typeof listeners === 'object') { l = arguments.length; args = new Array(l - 1); for (i = 1; i < l; ++i) args[i - 1] = arguments[i]; listeners = listeners.slice(); for (i = 0; (listener = listeners[i]); ++i) { apply.call(listener, this, args); } } else { switch (arguments.length) { case 1: call.call(listeners, this); break; case 2: call.call(listeners, this, arguments[1]); break; case 3: call.call(listeners, this, arguments[1], arguments[2]); break; default: l = arguments.length; args = new Array(l - 1); for (i = 1; i < l; ++i) { args[i - 1] = arguments[i]; } apply.call(listeners, this, args); } } }; methods = { on: on, once: once, off: off, emit: emit }; descriptors = { on: d(on), once: d(once), off: d(off), emit: d(emit) }; base = defineProperties({}, descriptors); module.exports = exports = function (o) { return (o == null) ? create(base) : defineProperties(Object(o), descriptors); }; exports.methods = methods; /***/ }, /* 2 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var assign = __webpack_require__(3) , normalizeOpts = __webpack_require__(10) , isCallable = __webpack_require__(11) , contains = __webpack_require__(12) , d; d = module.exports = function (dscr, value/*, options*/) { var c, e, w, options, desc; if ((arguments.length < 2) || (typeof dscr !== 'string')) { options = value; value = dscr; dscr = null; } else { options = arguments[2]; } if (dscr == null) { c = w = true; e = false; } else { c = contains.call(dscr, 'c'); e = contains.call(dscr, 'e'); w = contains.call(dscr, 'w'); } desc = { value: value, configurable: c, enumerable: e, writable: w }; return !options ? desc : assign(normalizeOpts(options), desc); }; d.gs = function (dscr, get, set/*, options*/) { var c, e, options, desc; if (typeof dscr !== 'string') { options = set; set = get; get = dscr; dscr = null; } else { options = arguments[3]; } if (get == null) { get = undefined; } else if (!isCallable(get)) { options = get; get = set = undefined; } else if (set == null) { set = undefined; } else if (!isCallable(set)) { options = set; set = undefined; } if (dscr == null) { c = true; e = false; } else { c = contains.call(dscr, 'c'); e = contains.call(dscr, 'e'); } desc = { get: get, set: set, configurable: c, enumerable: e }; return !options ? desc : assign(normalizeOpts(options), desc); }; /***/ }, /* 3 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; module.exports = __webpack_require__(4)() ? Object.assign : __webpack_require__(5); /***/ }, /* 4 */ /***/ function(module, exports) { 'use strict'; module.exports = function () { var assign = Object.assign, obj; if (typeof assign !== 'function') return false; obj = { foo: 'raz' }; assign(obj, { bar: 'dwa' }, { trzy: 'trzy' }); return (obj.foo + obj.bar + obj.trzy) === 'razdwatrzy'; }; /***/ }, /* 5 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var keys = __webpack_require__(6) , value = __webpack_require__(9) , max = Math.max; module.exports = function (dest, src/*, …srcn*/) { var error, i, l = max(arguments.length, 2), assign; dest = Object(value(dest)); assign = function (key) { try { dest[key] = src[key]; } catch (e) { if (!error) error = e; } }; for (i = 1; i < l; ++i) { src = arguments[i]; keys(src).forEach(assign); } if (error !== undefined) throw error; return dest; }; /***/ }, /* 6 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; module.exports = __webpack_require__(7)() ? Object.keys : __webpack_require__(8); /***/ }, /* 7 */ /***/ function(module, exports) { 'use strict'; module.exports = function () { try { Object.keys('primitive'); return true; } catch (e) { return false; } }; /***/ }, /* 8 */ /***/ function(module, exports) { 'use strict'; var keys = Object.keys; module.exports = function (object) { return keys(object == null ? object : Object(object)); }; /***/ }, /* 9 */ /***/ function(module, exports) { 'use strict'; module.exports = function (value) { if (value == null) throw new TypeError("Cannot use null or undefined"); return value; }; /***/ }, /* 10 */ /***/ function(module, exports) { 'use strict'; var forEach = Array.prototype.forEach, create = Object.create; var process = function (src, obj) { var key; for (key in src) obj[key] = src[key]; }; module.exports = function (options/*, …options*/) { var result = create(null); forEach.call(arguments, function (options) { if (options == null) return; process(Object(options), result); }); return result; }; /***/ }, /* 11 */ /***/ function(module, exports) { // Deprecated 'use strict'; module.exports = function (obj) { return typeof obj === 'function'; }; /***/ }, /* 12 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; module.exports = __webpack_require__(13)() ? String.prototype.contains : __webpack_require__(14); /***/ }, /* 13 */ /***/ function(module, exports) { 'use strict'; var str = 'razdwatrzy'; module.exports = function () { if (typeof str.contains !== 'function') return false; return ((str.contains('dwa') === true) && (str.contains('foo') === false)); }; /***/ }, /* 14 */ /***/ function(module, exports) { 'use strict'; var indexOf = String.prototype.indexOf; module.exports = function (searchString/*, position*/) { return indexOf.call(this, searchString, arguments[1]) > -1; }; /***/ }, /* 15 */ /***/ function(module, exports) { 'use strict'; module.exports = function (fn) { if (typeof fn !== 'function') throw new TypeError(fn + " is not a function"); return fn; }; /***/ } /******/ ]) }); ; /***/ } /******/ ]);