smooth-scroll

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

commit
dc4ea7695d2fba7abc01a304162bf2ccf6766273
parent
6eebac1bbf32e83b2a440270e730b37dc9d5af66
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2017-03-25 10:17
use event delegation

Diffstat

M smooth-scroll.js 26 ++++++++++++++++++--------

1 files changed, 18 insertions, 8 deletions


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

@@ -11,6 +11,21 @@
   11    11 })(function() {
   12    12   'use strict';
   13    13 
   -1    14   var closestMatch = function(el, selector, root) {
   -1    15     if (el && el !== root) {
   -1    16       return el.matches(selector) ? el : closestMatch(el.parentElement, selector, root);
   -1    17     }
   -1    18   };
   -1    19 
   -1    20   var delegated = function(element, eventType, selector, handler) {
   -1    21     element.addEventListener(eventType, function(event) {
   -1    22       var target = closestMatch(event.target, selector, element);
   -1    23       if (target) {
   -1    24         handler(event, target);
   -1    25       }
   -1    26     });
   -1    27   };
   -1    28 
   14    29   var animate = function(apply, duration) {
   15    30     var start = null;
   16    31 
@@ -55,24 +70,19 @@
   55    70 
   56    71   var init = function(options) {
   57    72     var selector = (options || {}).selector || '[href^="#"]';
   58    -1     var links = document.querySelectorAll(selector);
   59    73 
   60    74     window.addEventListener('popstate', function(event) {
   61    75       event.preventDefault();
   62    76       smoothScrollToSelector(window.location.hash, options);
   63    77     });
   64    78 
   65    -1     var smoothScrollClick = function(event) {
   -1    79     delegated(document, 'click', selector, function(event, target) {
   66    80       event.preventDefault();
   67    81 
   68    -1       var selector = event.currentTarget.getAttribute('href');
   -1    82       var selector = target.getAttribute('href');
   69    83       history.pushState(null, null, selector);
   70    84       smoothScrollToSelector(selector, options);
   71    -1     };
   72    -1 
   73    -1     for (var i = 0; i < links.length; i++) {
   74    -1       links[i].addEventListener('click', smoothScrollClick);
   75    -1     }
   -1    85     });
   76    86   };
   77    87 
   78    88   return {