Skip to content
Snippets Groups Projects
scroller.js 1.13 KiB
Newer Older
  • Learn to ignore specific revisions
  • export function scrollInit(divName) {
      let scroller = new Scroller(divName);
    }
    
    class Scroller {
      constructor(divName) {
        this.elmnt = document.getElementById(divName);
        this.reachedMaxScroll = false;
    
        this.elmnt.scrollTop = 0;
        this.previousScrollTop = 0;
    
        this.scrollDiv();
        this.elmnt.addEventListener("mouseover", () => {
          this.pauseScroll();
        });
        this.elmnt.addEventListener("mouseout", () => {
          this.resumeScroll();
        });
      }
    
      scrollDiv() {
        if (!this.reachedMaxScroll) {
          this.elmnt.scrollBy({ top: 5, left: 0, behavior: "smooth" });
          this.reachedMaxScroll =
            this.elmnt.scrollTop >=
            this.elmnt.scrollHeight - this.elmnt.offsetHeight;
          this.scrollTimeout = setTimeout(() => {
            this.scrollDiv();
          }, 100);
        } else {
          this.reachedMaxScroll = this.elmnt.scrollTop == 0 ? false : true;
          this.elmnt.scrollBy({ top: -5, left: 0, behavior: "smooth" });
    
          this.scrollTimeout = setTimeout(() => {
            this.scrollDiv();
          }, 100);
        }
      }
    
      pauseScroll() {
        clearInterval(this.scrollTimeout);
      }
    
      resumeScroll() {
        this.scrollDiv();
      }
    }