Template:ETH Zurich/pagination js

/* From: https://github.com/murtaugh/sticky-pagination-fixer */

var stickyItem = 'sticky-header'; // the ID of the fixed-position element var readAssistOffset = 40; // screen height - this offset value = scroll distance var duration = 250; // scroll speed in ms var doc = document.documentElement;

keydown = function (e) {

   var curElement = document.activeElement.nodeName;
   if ((e.keyCode === 32 && curElement === "BODY") || (e.keyCode === 33 || e.keyCode === 34)) {
       var viewportHeight = window.innerHeight;
       var stickyHeaderHeight = document.getElementById(stickyItem).offsetHeight;
       var newViewportHeight = viewportHeight - stickyHeaderHeight - readAssistOffset;
       e.preventDefault();
       if(e) {
           isShift = e.shiftKey || e.keyCode === 33 ? true : false;
       } else {
           isShift = window.event.shiftKey || e.keyCode === 33 ? true : false;
       };
       currScrollPosition = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);
       scrollToHere = newViewportHeight + currScrollPosition;
       if (isShift) {
           scrollToHere = currScrollPosition - newViewportHeight;
       }
       smoothScrollTo(scrollToHere)
   }

}

window.smoothScrollTo = (function () {

   var timer, start, factor;
   return function (target) {
       var offset = window.pageYOffset, delta = target - window.pageYOffset;
       start = Date.now();
       factor = 0;
       if( timer ) {
           clearInterval(timer);
       }
       function step() {
           var y;
           factor = (Date.now() - start) / duration;
           if( factor >= 1 ) {
               clearInterval(timer);
               factor = 1;
           } 
           y = factor * delta + offset;
           window.scrollBy(0, y - window.pageYOffset);
       }
       timer = setInterval(step, 10);
       return timer;
   };

}()); window.onkeydown = keydown;