@better-scroll/observe-image
Version:
Observe image loading for BetterScroll
2 lines (1 loc) • 2.87 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).ObserveImage=t()}(this,function(){"use strict";var r="undefined"!=typeof window,e=r&&navigator.userAgent.toLowerCase();if(e&&/wechatdevtools/.test(e),e&&e.indexOf("android"),"string"==typeof e)(e=/os (\d\d?_\d(_\d)?)/.exec(e))&&(13===(e=e[1].split("_").map(function(e){return parseInt(e,10)}))[0]&&e[1]);var i=!1;if(r)try{var t={};Object.defineProperty(t,"passive",{get:function(){i=!0}}),window.addEventListener("test-passive",function(){},t)}catch(e){}var o=r&&document.createElement("div").style,n=function(){if(r)for(var e=0,t=[{key:"standard",value:"transform"},{key:"webkit",value:"webkitTransform"},{key:"Moz",value:"MozTransform"},{key:"O",value:"OTransform"},{key:"ms",value:"msTransform"}];e<t.length;e++){var n=t[e];if(void 0!==o[n.value])return n.key}return!1}();function s(e){return!1===n?e:"standard"===n?"transitionEnd"===e?"transitionend":e:n+e.charAt(0).toUpperCase()+e.substr(1)}function a(e,t,n,r){r=i?{passive:!1,capture:!!r}:!!r;e.addEventListener(t,n,r)}function d(e,t,n,r){e.removeEventListener(t,n,{capture:!!r})}n&&"standard"!==n&&n.toLowerCase();s("transform"),s("transition");r&&s("perspective")in o,s("transitionTimingFunction"),s("transitionDuration"),s("transitionDelay"),s("transformOrigin"),s("transitionEnd"),s("transitionProperty"),u.prototype.destroy=function(){this.removeDOMEvents(),this.events=[]},u.prototype.addDOMEvents=function(){this.handleDOMEvents(a)},u.prototype.removeDOMEvents=function(){this.handleDOMEvents(d)},u.prototype.handleDOMEvents=function(t){var n=this,r=this.wrapper;this.events.forEach(function(e){t(r,e.name,n,!!e.capture)})},u.prototype.handleEvent=function(t){var n=t.type;this.events.some(function(e){return e.name===n&&(e.handler(t),!0)})};var p=u;function u(e,t){this.wrapper=e,this.events=t,this.addDOMEvents()}function f(e){this.scroll=e,this.refreshTimer=0,this.init()}return f.prototype.init=function(){this.handleOptions(this.scroll.options.observeImage),this.bindEventsToWrapper()},f.prototype.handleOptions=function(e){this.options=function(e,t){for(var n in t)e[n]=t[n];return e}({debounceTime:100},e=!0===(e=void 0===e?{}:e)?{}:e)},f.prototype.bindEventsToWrapper=function(){var e=this.scroll.scroller.wrapper;this.imageLoadEventRegister=new p(e,[{name:"load",handler:this.load.bind(this),capture:!0}]),this.imageErrorEventRegister=new p(e,[{name:"error",handler:this.load.bind(this),capture:!0}])},f.prototype.load=function(e){var t=this,e=e.target,n=this.options.debounceTime;e&&"img"===e.tagName.toLowerCase()&&(0===n?this.scroll.refresh():(clearTimeout(this.refreshTimer),this.refreshTimer=window.setTimeout(function(){t.scroll.refresh()},this.options.debounceTime)))},f.pluginName="observeImage",f});