Blame view
resources/js/common/directives/dragScroll.js
1.54 KB
e77200db5 Initial commit |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
angular.module('dragScroll', []).directive('dragScroll', function () { return { restrict: 'A', link: function (scope, elem) { var curPos = 0, momentum = 0, curDown = false, timestamp; elem = elem[0]; elem.addEventListener('mousemove', function (e) { if (curDown === true) { elem.scrollLeft += momentum = curPos - (curPos = e.pageX); } }); elem.addEventListener('mousedown', function (e) { curDown = true; curPos = e.pageX; momentum = 0; e.preventDefault(); }); elem.addEventListener('mouseup', mouseup); elem.addEventListener('mouseleave', mouseup); elem.addEventListener('click', function (e) { if (momentum) { e.preventDefault(); } }); function mouseup(e) { curDown = false; timestamp = Date.now(); window.requestAnimationFrame && window.requestAnimationFrame(autoScroll); } function autoScroll() { var elapsed = Date.now() - timestamp; var delta = momentum * Math.exp(-elapsed / 250); elem.scrollLeft += delta; if (delta > 1 || delta < -1) { window.requestAnimationFrame(autoScroll); } } }, }; }); |