smooth-scroll

simple smooth scrolling in the browser
git clone https://git.ce9e.org/smooth-scroll.git

commit
c0285e44b4a89e3ee51e5d676cae73bfb55e2903
parent
9eca17672615466a2508815040447c8675c8bf2b
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2018-08-07 21:00
refactoring

Diffstat

M smooth-scroll.js 25 ++++++++++++++-----------

1 files changed, 14 insertions, 11 deletions


diff --git a/smooth-scroll.js b/smooth-scroll.js

@@ -11,22 +11,24 @@
   11    11 })(function() {
   12    12   'use strict';
   13    13 
   14    -1   var delegated = function(element, eventType, selector, handler) {
   -1    14   var on = function(element, eventType, selector, fn) {
   15    15     element.addEventListener(eventType, function(event) {
   16    16       var target = event.target.closest(selector);
   17    -1       if (target) {
   18    -1         handler(event, target);
   -1    17       if (target && element.contains(target)) {
   -1    18         handler.call(target, event);
   19    19       }
   20    20     });
   21    21   };
   22    22 
   23    -1   var animate = function(apply, duration) {
   -1    23   var animate = function(fn, duration) {
   24    24     var start = null;
   25    25 
   26    26     var step = function(timestamp) {
   27    -1       if (!start) start = timestamp;
   -1    27       if (!start) {
   -1    28         start = timestamp;
   -1    29       }
   28    30       var progress = Math.min(1, (timestamp - start) / duration);
   29    -1       apply(progress);
   -1    31       fn(progress);
   30    32       if (progress < 1) {
   31    33         window.requestAnimationFrame(step);
   32    34       }
@@ -58,22 +60,23 @@
   58    60     var headerSelector = (options || {}).headerSelector || '[data-scroll-header]';
   59    61     var header = document.querySelector(headerSelector);
   60    62     var scrollY = document.querySelector(selector).offsetTop;
   61    -1     if (header) scrollY -= header.getBoundingClientRect().height;
   -1    63     if (header) {
   -1    64       scrollY -= header.getBoundingClientRect().height;
   -1    65     }
   62    66     smoothScrollTo(null, scrollY, options);
   63    67   };
   64    68 
   65    69   var init = function(options) {
   66    -1     var selector = (options || {}).selector || '[href^="#"]';
   67    -1 
   68    70     window.addEventListener('popstate', function(event) {
   69    71       event.preventDefault();
   70    72       smoothScrollToSelector(window.location.hash, options);
   71    73     });
   72    74 
   73    -1     delegated(document, 'click', selector, function(event, target) {
   -1    75     var selector = (options || {}).selector || '[href^="#"]';
   -1    76     on(document, 'click', selector, function(event) {
   74    77       event.preventDefault();
   75    78 
   76    -1       var selector = target.getAttribute('href');
   -1    79       var selector = this.getAttribute('href');
   77    80       history.pushState(null, null, selector);
   78    81       smoothScrollToSelector(selector, options);
   79    82     });