p-seamless-scroll
Version:
p-seamless-scroll
8 lines (7 loc) • 7.85 kB
JavaScript
/*!
* p-seamless-scroll v0.7.2
* Copyright 2024 Pbstar (https://github.com/pbstar)
* Licensed under MIT (https://github.com/pbstar/p-seamless-scroll/blob/main/LICENSE)
* 2025-05-19 15:32:48
*/
!function(e,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):(e="undefined"!=typeof globalThis?globalThis:e||self).pSeamlessScroll=i()}(this,(function(){"use strict";function e(e,i,t,n){if("a"===t&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof i?e!==i||!n:!i.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===t?n:"a"===t?n.call(e):n?n.value:i.get(e)}function i(e,i){return"down"==e.config.direction||"up"==e.config.direction?i.offsetHeight:"left"==e.config.direction||"right"==e.config.direction?i.offsetWidth:0}function t(e){var i,t,n,o;"up"==e.config.direction||"down"==e.config.direction?null===(t=null===(i=e.el.firstElementChild)||void 0===i?void 0:i.firstElementChild)||void 0===t||t.animate({transform:"translate(0px, "+e.distance+"px)"},{duration:0,fill:"forwards"}):"left"!=e.config.direction&&"right"!=e.config.direction||null===(o=null===(n=e.el.firstElementChild)||void 0===n?void 0:n.firstElementChild)||void 0===o||o.animate({transform:"translate("+e.distance+"px, 0px)"},{duration:0,fill:"forwards"})}function n(e){!function i(){if(e.state.isPause)return;if("up"==e.config.direction||"left"==e.config.direction)if(Math.abs(e.distance)>=e.contentDistance){if(e.distance=0,t(e),!e.config.loop)return void(e.state.isPause=!0);i()}else if(e.contentDistance-Math.abs(e.distance)<e.step){let i=(e.contentDistance-Math.abs(e.distance))/e.step*e.config.speed;e.distance=-e.contentDistance,n(i)}else e.distance-=e.step,n(e.config.speed);else if("down"==e.config.direction||"right"==e.config.direction)if(e.distance>=0){if(e.distance=-e.contentDistance,t(e),!e.config.loop)return void(e.state.isPause=!0);i()}else if(Math.abs(e.distance)<e.step){let i=Math.abs(e.distance)/e.step*e.config.speed;e.distance=0,n(i)}else e.distance+=e.step,n(e.config.speed);function n(t){e.config.rest&&(e.restDistance+=e.step*t/e.config.speed,function(e,i){e.restDistance>=e.config.rest.distance&&(e.restDistance=0,e.state.isPause=!0,e.restTimer&&clearTimeout(e.restTimer),e.restTimer=setTimeout((()=>{e.state.isPause=!1,i()}),e.config.rest.time))}(e,i)),function(e,i){var t,n,o,r;"up"==e.config.direction||"down"==e.config.direction?null===(n=null===(t=e.el.firstElementChild)||void 0===t?void 0:t.firstElementChild)||void 0===n||n.animate({transform:"translate(0px, "+e.distance+"px)"},{duration:i,fill:"forwards"}):"left"!=e.config.direction&&"right"!=e.config.direction||null===(r=null===(o=e.el.firstElementChild)||void 0===o?void 0:o.firstElementChild)||void 0===r||r.animate({transform:"translate("+e.distance+"px, 0px)"},{duration:i,fill:"forwards"})}(e,t),e.timer&&clearTimeout(e.timer),e.timer=setTimeout((()=>{i()}),t)}}()}function o(e,t){if(function(e){if(!e.el)return console.error("ErrCode:101"),!1;if(e.raw_el=e.el.innerHTML,!e.config.directionList.includes(e.config.direction))return console.error("ErrCode:102"),!1;if(e.config.speed<1||e.config.speed>1e5)return console.error("ErrCode:103"),!1;if(e.config.loop&&1!=e.config.loop&&0!=e.config.loop)return console.error("ErrCode:104"),!1;if(e.config.hoverStop&&1!=e.config.hoverStop&&0!=e.config.hoverStop)return console.error("ErrCode:105"),!1;if(e.config.auto&&1!=e.config.auto&&0!=e.config.auto)return console.error("ErrCode:106"),!1;if(e.config.rest){if(!e.config.rest.distance||e.config.rest.distance<10||e.config.rest.distance>1e5||e.config.rest.distance%10!=0)return console.error("ErrCode:107-1"),!1;if(!e.config.rest.time||e.config.rest.time<1||e.config.rest.time>1e5)return console.error("ErrCode:107-2"),!1}return!0}(e)){if(function(e){e.state={isHover:!1,isPause:!1},e.timer=null,e.restTimer=null,e.isHoverShield=!1,e.contentDistance=0,e.viewDistance=0,e.step=10,e.distance=0,e.restDistance=0,e.isInit=!1}(e),function(e){let i=document.createElement("div"),t=document.createElement("div");i.style.display="inline-flex",i.style.pointerEvents="none",t.style.width="100%",t.style.height="100%",t.style.overflow="hidden","up"!=e.config.direction&&"down"!=e.config.direction||(i.style.flexDirection="column");for(let t=0;t<e.el.children.length;t++)i.append(e.el.children[t]);t.append(i),e.el.append(t),t=null,i=null}(e),e.contentDistance=i(e,e.el.firstElementChild.firstElementChild),e.viewDistance=i(e,e.el),e.contentDistance<e.viewDistance)return console.error("ErrCode:108");if(e.viewDistance<e.step)return console.error("ErrCode:109");!function(e){var t,n,o,r,s,l,c,f,d;let a=(null===(n=null===(t=e.el.firstElementChild)||void 0===t?void 0:t.firstElementChild)||void 0===n?void 0:n.children.length)||0,u=0;for(let t=0;t<a&&(u+=i(e,null===(r=null===(o=e.el.firstElementChild)||void 0===o?void 0:o.firstElementChild)||void 0===r?void 0:r.children[t]),null===(l=null===(s=e.el.firstElementChild)||void 0===s?void 0:s.firstElementChild)||void 0===l||l.append(null===(d=null===(f=null===(c=e.el.firstElementChild)||void 0===c?void 0:c.firstElementChild)||void 0===f?void 0:f.children[t])||void 0===d?void 0:d.cloneNode(!0)),!(u>=e.viewDistance));t++);}(e),function(e,i){e.el.firstElementChild.onmouseenter=()=>{e.state.isHover||(e.state.isHover=!0,e.isHoverShield||e.config.hoverStop&&(e.state.isPause=!0,i()))},e.el.firstElementChild.onmouseleave=()=>{e.state.isHover&&(e.state.isHover=!1,e.isHoverShield||e.config.hoverStop&&(e.state.isPause=!1,i()))}}(e,(()=>{n(e)})),e.isInit=!0,e.config.auto&&n(e),function(e,i){e.state=new Proxy(e.state,{set(t,n,o,r){i.state[n]=o,"isPause"==n&&e.restTimer&&clearTimeout(e.restTimer);for(let i=0;i<e.watchs.length;i++){let{ks:t,f:r}=e.watchs[i];t==n&&r(o)}return Reflect.set(t,n,o,r)}})}(e,t)}}function r(e){var i;if(!e.isInit)return console.error("ErrCode:110");e.isInit=!1,e.el.innerHTML=e.raw_el,e.timer&&clearTimeout(e.timer),e.restTimer&&clearTimeout(e.restTimer),e.config.hoverStop&&(null===(i=e.el.firstElementChild)||void 0===i?void 0:i.onmouseenter)&&(e.el.firstElementChild.onmouseenter=null,e.el.firstElementChild.mouseleave=null),e.state=new Proxy(e.state,{})}var s;"function"==typeof SuppressedError&&SuppressedError;return s=new WeakMap,class{constructor(e){s.set(this,{el:null,raw_el:null,config:{direction:"up",directionList:["up","down","left","right"],hoverStop:!1,speed:100,auto:!0,loop:!0,rest:null},state:{isHover:!1,isPause:!1},timer:null,restTimer:null,isHoverShield:!1,contentDistance:0,viewDistance:0,step:10,distance:0,restDistance:0,isInit:!1,watchs:[]}),this.state={isHover:!1,isPause:!1},this.init(e)}init(i){e(this,s,"f").el=i.el,e(this,s,"f").config.direction=i.direction||"up",e(this,s,"f").config.hoverStop=!0===i.hoverStop,e(this,s,"f").config.speed=i.speed||100,e(this,s,"f").config.auto=!1!==i.auto,e(this,s,"f").config.loop=!1!==i.loop,e(this,s,"f").config.rest=i.rest||null,o(e(this,s,"f"),this)}play(){!function(e){if(!e.isInit)return console.error("ErrCode:110");e.state.isPause=!1,e.isHoverShield=!1,n(e)}(e(this,s,"f"))}pause(){!function(e){if(!e.isInit)return console.error("ErrCode:110");e.state.isPause=!0,e.isHoverShield=!0}(e(this,s,"f"))}reload(i){r(e(this,s,"f")),e(this,s,"f").config.direction=i.direction||"up",e(this,s,"f").config.hoverStop=!0===i.hoverStop,e(this,s,"f").config.speed=i.speed||100,e(this,s,"f").config.auto=!1!==i.auto,e(this,s,"f").config.loop=!1!==i.loop,e(this,s,"f").config.rest=i.rest||null,o(e(this,s,"f"),this)}destroy(){r(e(this,s,"f"))}getState(){return e(this,s,"f").state}on(i,t){"hover"==i?e(this,s,"f").watchs.push({es:i,ks:"isHover",f:t}):"pause"==i&&e(this,s,"f").watchs.push({es:i,ks:"isPause",f:t})}off(i){let t=e(this,s,"f").watchs.filter((e=>e.es!==i));e(this,s,"f").watchs=t}}}));