Advertisement
Guest User

Untitled

a guest
Apr 24th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const helper = {
  2.     getDelta(event) {
  3.         if(event.wheelDelta) {
  4.             return event.wheelDelta;
  5.             } else {
  6.             return -event.detail;
  7.         }
  8.     },
  9.     throttle(method, delay, context) {
  10.         let inThrottle = false;
  11.         return function() {
  12.             if (!inThrottle) {
  13.                 inThrottle = true;
  14.                 method.apply(context, arguments);
  15.                 setTimeout(() => {
  16.                     inThrottle = false;
  17.                 }, delay);
  18.             }
  19.         }
  20.     },
  21.     debounce(method, delay, context) {
  22.         let inDebounce;
  23.         return function() {
  24.             clearTimeout(method.inDebounce);
  25.             inDebounce = setTimeout(() => {
  26.                 method.apply(context, arguments);
  27.             }, delay);
  28.         }
  29.     }
  30. }
  31. class ScrollPages {
  32.     constructor(currentPageNumber, totalPageNumber, pages){
  33.         this.currentPageNumber = currentPageNumber;
  34.         this.totalPageNumber = totalPageNumber;
  35.         this.pages = pages;
  36.         this.viewHeight = document.documentElement.clientHeight;
  37.     }
  38.     mouseScroll(event) {
  39.         let delta = helper.getDelta(event);
  40.         if (delta < 0) {
  41.             this.scrollDown();
  42.             } else {
  43.             this.scrollUp();
  44.         }
  45.     }
  46.     scrollDown() {
  47.         if (this.currentPageNumber !== this.totalPageNumber){
  48.             this.pages.style.top = (-this.viewHeight * this.currentPageNumber) + 'px';
  49.             this.currentPageNumber++;
  50.             this.updateNav();
  51.             this.textFadeInOut();
  52.         }
  53.     }
  54.     scrollUp() {
  55.         if (this.currentPageNumber !== 1) {
  56.             this.pages.style.top = (-this.viewHeight * (this.currentPageNumber - 2)) + 'px';
  57.             this.currentPageNumber--;
  58.             this.updateNav();
  59.             this.textFadeInOut();
  60.         }
  61.     }
  62.     scrollTo(targetPageNumber) {
  63.         while (this.currentPageNumber !== targetPageNumber) {
  64.             if (this.currentPageNumber > targetPageNumber) {
  65.                 this.scrollUp();
  66.                 } else {
  67.                 this.scrollDown();
  68.             }
  69.         }
  70.     }
  71.     createNav() {
  72.         const pageNav = document.createElement('div');
  73.         pageNav.className = 'nav-dot-container';
  74.         this.pages.appendChild(pageNav);
  75.         for(let i=0; i < this.totalPageNumber; i++) {
  76.             pageNav.innerHTML += '<p class="nav-dot"><span></span></p>';
  77.         }
  78.         const navDots = document.getElementsByClassName('nav-dot');
  79.         this.navDots = Array.prototype.slice.call(navDots);
  80.         this.navDots[0].classList.add('dot-active');
  81.         this.navDots.forEach((e, index) => {
  82.             e.addEventListener('click', event => {
  83.                 this.scrollTo(index+1);
  84.                 this.navDots.forEach(e => {
  85.                     e.classList.remove('dot-active');
  86.                 });
  87.                 e.classList.add('dot-active');
  88.             });
  89.         });
  90.     }
  91.     updateNav() {
  92.         this.navDots.forEach(e => {
  93.             e.classList.remove('dot-active');
  94.         });
  95.         this.navDots[this.currentPageNumber-1].classList.add('dot-active');
  96.     }
  97.     resize() {
  98.         this.viewHeight = document.documentElement.clientHeight;
  99.         this.pages.style.height = this.viewHeight + 'px';
  100.         this.pages.style.top = -this.viewHeight * (this.currentPageNumber-1) + 'px';
  101.     }
  102.     textFadeInOut() {
  103.         const containersDom = document.getElementsByClassName('text-container');
  104.         let textContainers = Array.prototype.slice.call(containersDom);
  105.         textContainers.forEach((e) => {
  106.             e.classList.remove('in-sight');
  107.         });
  108.         let textContainerInSight = textContainers[this.currentPageNumber-1];
  109.         textContainerInSight.classList.add('in-sight')
  110.     }
  111.     init() {
  112.         let handleMouseWheel = helper.throttle(this.mouseScroll, 500, this);
  113.         let handleResize = helper.debounce(this.resize, 500, this);
  114.         this.pages.style.height = this.viewHeight + 'px';
  115.         this.createNav();
  116.         this.textFadeInOut();
  117.         if (navigator.userAgent.toLowerCase().indexOf('firefox') === -1) {
  118.             document.addEventListener('wheel', handleMouseWheel);
  119.             } else {
  120.             document.addEventListener('DOMMouseScroll', handleMouseWheel);
  121.         }
  122.         document.addEventListener('touchstart', (event) => {
  123.             this.startY = event.touches[0].pageY;
  124.         });
  125.         document.addEventListener('touchend', (event) => {
  126.             let endY = event.changedTouches[0].pageY;
  127.             if (this.startY - endY < 0) {
  128.                 this.scrollUp();
  129.             }
  130.             if (this.startY - endY > 0) {
  131.                 this.scrollDown();
  132.             }
  133.         });
  134.         document.addEventListener('touchmove', (event) => {
  135.             event.preventDefault();
  136.         });
  137.         window.addEventListener('resize', handleResize);
  138.     }
  139. }
  140.  
  141. document.addEventListener('DOMContentLoaded', function() {
  142.     var s = new ScrollPages(1,7,document.getElementById('all-pages'));
  143.     s.init();
  144. })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement