@internetguru/scrolltopable
Version:
Scrolltopable is a JavaScript module that provides ultimate scroll-to-top functionality. No dependencies and frameworks, pure JavaScript!
1 lines • 1.73 kB
JavaScript
var Config={content:"↑",title:"Top",id:"js-scrolltopable",visibleClass:"js-scrolltopable--visible",activeClass:"js-scrolltopable--active",extraClass:"noprint",hideBeforeTop:500,showBeforeBottom:500,showAfterUp:200,hideAfterDown:200,activeTime:0,scrollActionDelay:200};let Scrolltopable=function(){function o(){window.clearTimeout(e),e=window.setTimeout(function(){var e,o,t;i.classList.contains(Config.activeClass)||(o=(e=l())-n,t=Math.abs(o),s()-e<Config.showBeforeBottom?a():e<=Config.hideBeforeTop||0<o&&t>Config.hideAfterDown?c():t>Config.showAfterUp&&a(),n=e)},Config.scrollActionDelay)}let e=null,i=null,t=!1,n=0,l=function(){return document.body.scrollTop||document.documentElement.scrollTop},s=function(){var e=document.body,o=document.documentElement;return Math.max(e.scrollHeight,e.offsetHeight,o.clientHeight,o.scrollHeight,o.offsetHeight)-Math.max(o.clientHeight,window.innerHeight||0)},c=function(){t=!1,i.classList.remove(Config.visibleClass)},a=function(){t=!0,i.classList.add(Config.visibleClass)};return{init:function(e){Config={...Config,...e},(i=document.createElement("a")).id=Config.id,i.title=Config.title,i.className=Config.extraClass+" "+Config.id,(e=document.createElement("span")).innerHTML=Config.content,i.appendChild(e),document.body.appendChild(i),Config.styles,(e=document.createElement("style")).innerHTML=Config.styles,document.head.appendChild(e),window.addEventListener("scroll",o,!1),i.addEventListener("click",e=>{window.scrollTo(0,0),0!=Config.activeTime&&(i.classList.add(Config.activeClass),window.setTimeout(()=>{i.classList.remove(Config.activeClass),c()},Config.activeTime))}),(e=l())<=Config.hideBeforeTop||(a(),n=e)}}},instance=new Scrolltopable;export{instance as Scrolltopable};