- 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 7865 -1 var smoothScrollClick = function(event) {-1 79 delegated(document, 'click', selector, function(event, target) { 66 80 event.preventDefault(); 67 8168 -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 -173 -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 {