UNPKG

@livelybone/scroll-get

Version:

Some useful tool of browser scroll, such as tool for calculating position relative to page/client, tool for getting the native scrollbar width...

10 lines (8 loc) 5.86 kB
/** * Bundle of @livelybone/scroll-get * Generated: 2021-06-28 * Version: 6.2.1 * License: MIT * Author: 2631541504@qq.com */ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).ScrollGet={})}(this,function(e){"use strict";function t(t,e){var n,r=Object.keys(t);return Object.getOwnPropertySymbols&&(n=Object.getOwnPropertySymbols(t),e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)),r}function d(r){for(var e=1;e<arguments.length;e++){var o=null!=arguments[e]?arguments[e]:{};e%2?t(Object(o),!0).forEach(function(e){var t,n;t=r,e=o[n=e],n in t?Object.defineProperty(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(o)):t(Object(o)).forEach(function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(o,e))})}return r}function h(e,t){if(null==e)return{};var n,r=function(e,t){if(null==e)return{};for(var n,r={},o=Object.keys(e),i=0;i<o.length;i++)n=o[i],0<=t.indexOf(n)||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols)for(var o=Object.getOwnPropertySymbols(e),i=0;i<o.length;i++)n=o[i],0<=t.indexOf(n)||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n]);return r}function o(e){return function(e){if(Array.isArray(e))return r(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return r(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Map"===(n="Object"===n&&e.constructor?e.constructor.name:n)||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function m(e){return e.getBoundingClientRect()}function n(e){return e+(1-e)*e}function v(r,o,e){function i(e){window.requestAnimationFrame(function(){e()&&i(e)})}var l=e||n;return new Promise(function(t){var n=Date.now();i(function(){var e=l(Math.min(1,(Date.now()-n)/r));return o(e),!(1<=e)||(t(),!1)})})}function w(e){var t=window.getComputedStyle(e),n={top:0,left:0};return"HTML"!==e.nodeName&&!["scroll","auto","overlay"].includes(t.overflowX)||(n.left=Math.max(0,e.scrollWidth-e.clientWidth)),"HTML"!==e.nodeName&&!["scroll","auto","overlay"].includes(t.overflowY)||(n.top=Math.max(0,e.scrollHeight-e.clientHeight)),n}function i(e){return!e.top&&!e.left}function y(e){if(null!=e&&e.style){var t=window.getComputedStyle(e);if("fixed"!==t.position){var n=e.ownerDocument;if("absolute"===t.position)return e.offsetParent?y(e.offsetParent):i(w(n.body))?y(n.body):n.body;e=e.parentElement;return e?i(w(e))&&e!==n.documentElement?y(e):e:void 0}}}e.animation=v,e.getMaxScrollOffset=w,e.getNativeScrollbarWidth=function(e){var t=e||window,n=t===window;try{var r,o,i=n?window.nativeScrollbarWidth:null;return i&&"number"==typeof i.y&&"number"==typeof i.x||(r=e&&"ownerDocument"in e?e.ownerDocument:document,o=n?r.createElement("div"):t,n&&(o.setAttribute("style","position:fixed;top:0;left:0;opacity:0;pointer-events:none;width:200px;height:200px;overflow:scroll"),r.body.appendChild(o)),i={y:o.offsetWidth-o.clientWidth,x:o.offsetHeight-o.clientHeight},n&&(window.nativeScrollbarWidth=i,r.body.removeChild(o))),i}catch(e){return{y:17,x:17}}},e.getRect=m,e.getScrollParent=y,e.getViewElementsWhenScroll=function(r,o,i){if(0<o.length){var l=[],e=function(e){var n=m(r),t=o.map(m).map(function(e,t){return e.viewHeight=Math.max(0,Math.min(e.top+e.height,n.top+n.height)-Math.max(n.top,e.top)),e.viewWidth=Math.max(0,Math.min(e.left+e.width,n.left+n.width)-Math.max(n.left,e.left)),e.height&&e.width?e.viewPercent=e.viewHeight*e.viewWidth/e.height*e.width:e.height||e.width?e.height?e.viewPercent=e.viewHeight/e.height:e.viewPercent=e.viewWidth/e.width:e.viewPercent=0,{rect:e,element:o[t]}}).filter(function(e){return 0<e.rect.viewPercent}).sort(function(e,t){var n=t.rect.viewPercent-e.rect.viewPercent;return n||t.rect.viewHeight*t.rect.viewWidth-e.rect.viewHeight*e.rect.viewWidth});t.length===l.length&&!t.some(function(e,t){return e.element!==l[t].element})||i(l=t,n,e)};return e(),r.addEventListener("scroll",e),function(){return r.removeEventListener("scroll",e)}}return function(){}},e.isElementInView=function(n){if(!n)return!1;var e=n.getBoundingClientRect(),t=e.x+e.width/2,r=e.y+e.height/2;return[[t,e.y],[t,e.y+e.height-1],[e.x,r],[e.x+e.width-1,r],[t,r]].some(function(e){var t;return n.contains((t=n.ownerDocument).elementFromPoint.apply(t,o(e)))})},e.posRelativeToClient=function(e){return{clientLeft:(e=m(e)).left,clientTop:e.top}},e.posRelativeToPage=function(e){for(var t={pageLeft:0,pageTop:0},n=e;n;)t.pageLeft+=n.offsetLeft,t.pageTop+=n.offsetTop,n=n.offsetParent;return t},e.scrollToElement=function e(t,n){var r=n||{},o=r.offset,i=void 0===o?0:o,n=r.time,l=void 0===n?300:n,f=h(r,["offset","time"]),o="number"==typeof i?{left:i,top:i}:{left:i.left||0,top:i.top||0},c=y(t);if(c&&(!f.topDisabled||!f.leftDisabled)){var n=function(){return e(c,d({time:l},f))},r=w(c),a=c.scrollLeft,u=c.scrollTop,i=m(t),t=m(c);"HTML"===c.nodeName&&(t.y=0);var p=Math.min(i.left-t.left+o.left,r.left-c.scrollLeft),s=Math.min(i.top-t.top+o.top,r.top-c.scrollTop);if(p&&!f.leftDisabled||s&&!f.topDisabled)return v(l,function(e){f.topDisabled||(c.scrollTop=u+s*e),f.leftDisabled||(c.scrollLeft=a+p*e)},f.rateFactor).then(f.affectParent?n:null);if(f.affectParent)return n()}return Promise.resolve()},Object.defineProperty(e,"__esModule",{value:!0})});