-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwindowevents.min.js
More file actions
1 lines (1 loc) · 8.19 KB
/
windowevents.min.js
File metadata and controls
1 lines (1 loc) · 8.19 KB
1
!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):(t="undefined"!=typeof globalThis?globalThis:t||self).WindowEvents=i()}(this,(function(){"use strict";function t(t,i){if(!(t instanceof i))throw new TypeError("Cannot call a class as a function")}function i(t,i){for(var e=0;e<i.length;e++){var n=i[e];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function e(t,e,n){return e&&i(t.prototype,e),n&&i(t,n),t}function n(t,i,e){return i in t?Object.defineProperty(t,i,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[i]=e,t}function s(t,i){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);i&&(n=n.filter((function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable}))),e.push.apply(e,n)}return e}function o(t){for(var i=1;i<arguments.length;i++){var e=null!=arguments[i]?arguments[i]:{};i%2?s(Object(e),!0).forEach((function(i){n(t,i,e[i])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):s(Object(e)).forEach((function(i){Object.defineProperty(t,i,Object.getOwnPropertyDescriptor(e,i))}))}return t}function l(){function t(t){return"[object Function]"===Object.prototype.toString.call(t)}var i=0,e=[];this.on=function(){var n=!(arguments.length<=0||void 0===arguments[0])&&arguments[0],s=!(arguments.length<=1||void 0===arguments[1])&&arguments[1];if(n&&s&&t(s)){var o=!1,l={id:"cov_"+ ++i,fn:s};if(e.forEach((function(t){if(t.name===n)return t.callbacks.push(l),void(o=!0)})),!o){var h={name:n,callbacks:[l]};e.push(h)}return l.id}return!1},this.once=function(){var e=!(arguments.length<=0||void 0===arguments[0])&&arguments[0],n=!(arguments.length<=1||void 0===arguments[1])&&arguments[1];if(e&&n&&t(n)){var s="cov_"+(i+1),o=function(){n.apply(null,arguments),this.off(e,s)}.bind(this);return this.on(e,o),s}return!1},this.signal=function(){var t=!(arguments.length<=0||void 0===arguments[0])&&arguments[0],i=arguments.length<=1||void 0===arguments[1]?[]:arguments[1];return t&&e.forEach((function(e){e.name!==t||e.callbacks.forEach((function(t){t.fn.apply(null,i)}))})),this},this.off=function(){var i=!(arguments.length<=0||void 0===arguments[0])&&arguments[0],n=!(arguments.length<=1||void 0===arguments[1])&&arguments[1];return i&&e.forEach((function(e,s,o){e.name!==i||(n?e.callbacks.forEach((function(i,e,s){(i.id===n||t(n)&&i.fn===n)&&s.splice(e,1)})):o.splice(s,1))})),this}}var h={cov:new l,Covenant:l},r=function(t,i,e,n){var s,o=0;return"boolean"!=typeof i&&(n=e,e=i,i=void 0),function(){var l=this,h=Number(new Date)-o,r=arguments;function a(){o=Number(new Date),e.apply(l,r)}function c(){s=void 0}n&&!s&&a(),s&&clearTimeout(s),void 0===n&&h>t?a():!0!==i&&(s=setTimeout(n?c:a,void 0===n?t-h:t))}},a=function(t,i,e){return void 0===e?r(t,i,!1):r(t,e,!1!==i)},c=function(){function i(e,n,s){t(this,i),this.signal=e.signal,this.options=n,this.windowSize=s,this.scrollTimeout=null,this.debouncedListener=this.debouncedListener.bind(this),this.throttledListener=this.throttledListener.bind(this),this.updateState()}return e(i,[{key:"updateState",value:function(){this.scrollTop=this.lastScrollTop=window.scrollY||window.pageYOffset,this.scrollPercent=this.scrollTop/(this.windowSize.scrollHeight-this.windowSize.height)*100}},{key:"getState",value:function(){return{scrollTop:this.scrollTop,scrollPercent:this.scrollPercent}}},{key:"debouncedListener",value:function(){this.scrollTop=window.scrollY||window.pageYOffset,this.scrollPercent=this.scrollTop/(this.windowSize.scrollHeight-this.windowSize.height)*100,this.signal("scroll.start",[{scrollTop:this.scrollTop,scrollPercent:this.scrollPercent}]),this.lastScrollTop=this.scrollTop}},{key:"throttledListener",value:function(){var t=this;this.scrollTop=window.scrollY||window.pageYOffset,this.scrollPercent=this.scrollTop/(this.windowSize.scrollHeight-this.windowSize.height)*100;var i={scrollTop:this.scrollTop,scrollPercent:this.scrollPercent};this.signal("scroll",[i]),this.scrollTop>this.lastScrollTop?this.signal("scroll.down",[i]):this.scrollTop<this.lastScrollTop&&this.signal("scroll.up",[i]),this.scrollTop<=0&&this.signal("scroll.top",[i]),i.scrollPercent>=100&&this.signal("scroll.bottom",[i]),clearTimeout(this.scrollTimeout),this.scrollTimeout=setTimeout((function(){t.signal("scroll.stop",[i])}),this.options.scrollDelay+1),this.lastScrollTop=this.scrollTop}}]),i}(),d=function(){function i(e,n){t(this,i),this.signal=e.signal,this.options=n,this.resizeTimeout=null,this.debouncedListener=this.debouncedListener.bind(this),this.throttledListener=this.throttledListener.bind(this),this.updateState()}return e(i,[{key:"updateState",value:function(){this.height=this.lastH=window.innerHeight,this.width=this.lastW=window.innerWidth,this.scrollHeight=this.lastS=document.body.scrollHeight,this.orientation=this.lastO=this.height>this.width?"portrait":"landscape"}},{key:"getState",value:function(){return{height:this.height,width:this.width,scrollHeight:this.scrollHeight,orientation:this.orientation}}},{key:"debouncedListener",value:function(){this.height=window.innerHeight,this.width=window.innerWidth,this.scrollHeight=document.body.scrollHeight,this.orientation=this.height>this.width?"portrait":"landscape";var t={height:this.height,width:this.width,scrollHeight:this.scrollHeight,orientation:this.orientation};this.signal("resize.start",[t]),this.lastH=this.height,this.lastW=this.width,this.lastS=this.scrollHeight}},{key:"throttledListener",value:function(){var t=this;this.height=window.innerHeight,this.width=window.innerWidth,this.scrollHeight=document.body.scrollHeight,this.orientation=this.height>this.width?"portrait":"landscape";var i={height:this.height,width:this.width,scrollHeight:this.scrollHeight,orientation:this.orientation};this.signal("resize",[i]),this.orientation!==this.lastO&&this.signal("resize.orientationChange",[i]),this.scrollHeight!==this.lastS&&this.signal("resize.scrollHeightChange",[i]),clearTimeout(this.scrollTimeout),this.scrollTimeout=setTimeout((function(){t.signal("resize.stop",[i])}),this.options.resizeDelay+1),this.lastH=this.height,this.lastW=this.width,this.lastS=this.scrollHeight,this.lastO=this.orientation}}]),i}(),u=function(){function i(e,n){t(this,i),this.signal=e.signal,this.options=n,this.changeListenter=this.changeListenter.bind(this),this.updateState()}return e(i,[{key:"updateState",value:function(){this.visible=!document.hidden}},{key:"getState",value:function(){return{visible:this.visible}}},{key:"changeListenter",value:function(){this.visible=!document.hidden;var t={visible:this.visible};this.signal("visibilityChange",[t]),this.visible?this.signal("visibilityChange.show",[t]):this.signal("visibilityChange.hide",[t])}}]),i}(),g=function(){function i(e,n){t(this,i),this.signal=e.signal,this.options=n,this.changeListenter=this.changeListenter.bind(this),this.updateState()}return e(i,[{key:"updateState",value:function(){this.loaded=document.readyState}},{key:"getState",value:function(){return{loaded:this.loaded}}},{key:"changeListenter",value:function(){this.loaded=document.readyState;var t={loaded:this.loaded};this.signal("load",[t]),"interactive"===this.loaded?this.signal("load.interactive",[t]):"complete"===this.loaded&&this.signal("load.complete",[t])}}]),i}();return function i(e){var n=this;t(this,i);var s={scrollDelay:100,resizeDelay:350};this.options=e?o(o({},s),e):s;var l=new h.Covenant;this.on=l.on,this.once=l.once,this.off=l.off;var f=new d(l,this.options),p=new c(l,this.options,f),v=new u(l,this.options),w=new g(l,this.options);this.getState=function(){return o(o(o(o({},f.getState()),p.getState()),v.getState()),w.getState())},this.updateState=function(){return f.updateState(),p.updateState(),v.updateState(),w.updateState(),n.getState()},window.addEventListener("scroll",a(this.options.scrollDelay,!0,p.debouncedListener),!1),window.addEventListener("scroll",r(this.options.scrollDelay,!1,p.throttledListener),!1),window.addEventListener("resize",a(this.options.resizeDelay,!0,f.debouncedListener),!1),window.addEventListener("resize",r(this.options.resizeDelay,!1,f.throttledListener),!1),window.addEventListener("visibilitychange",v.changeListenter,!1),document.addEventListener("readystatechange",(function(){n.updateState(),w.changeListenter()}),!1)}}));