diff --git a/dragscroll.js b/dragscroll.js index d99cc3f..4a5fbb3 100644 --- a/dragscroll.js +++ b/dragscroll.js @@ -1,9 +1,9 @@ /** * @fileoverview dragscroll - scroll area by dragging * @version 0.0.5 - * + * * @license MIT, see http://github.com/asvd/intence - * @copyright 2015 asvd + * @copyright 2015 asvd */ @@ -21,17 +21,39 @@ var mousemove = 'mousemove'; var mouseup = 'mouseup'; var mousedown = 'mousedown'; + var touchstart = 'touchstart'; + var touchend = 'touchend'; + var touchmove = 'touchmove'; + var touchcancel = 'touchcancel'; var EventListener = 'EventListener'; var addEventListener = 'add'+EventListener; var removeEventListener = 'remove'+EventListener; var dragged = []; + + var off = function(i, el) { + for (i = 0; i < dragged.length;) { + el = dragged[i++]; + el[removeEventListener](mousedown, el.md, 0); + el[removeEventListener](touchstart, el.tmd, 0); + _window[removeEventListener](mouseup, el.mu, 0); + _window[removeEventListener](mousemove, el.mm, 0); + _window[removeEventListener](touchmove, el.tmm, 0); + _window[removeEventListener](touchend, el.tmu, 0); + _window[removeEventListener](touchcancel, el.tmc, 0); + } + } + var reset = function(i, el) { for (i = 0; i < dragged.length;) { el = dragged[i++]; el[removeEventListener](mousedown, el.md, 0); + el[removeEventListener](touchstart, el.tmd, 0); _window[removeEventListener](mouseup, el.mu, 0); _window[removeEventListener](mousemove, el.mm, 0); + _window[removeEventListener](touchmove, el.tmm, 0); + _window[removeEventListener](touchend, el.tmu, 0); + _window[removeEventListener](touchcancel, el.tmc, 0); } dragged = _document.getElementsByClassName('dragscroll'); @@ -48,15 +70,30 @@ e.stopPropagation(); }, 0 ); - + el[addEventListener]( + touchstart, + el.tmd = function(e) { + pushed = 1; + lastClientX = e.touches[0].clientX; + lastClientY = e.touches[0].clientY; + + }, 0 + ); + _window[addEventListener]( mouseup, el.mu = function() {pushed = 0;}, 0 ); - + _window[addEventListener]( + touchend, el.tmu = function() {pushed = 0;}, 0 + ); + _window[addEventListener]( + touchcancel, el.tmc = function() {pushed = 0;}, 0 + ); + _window[addEventListener]( mousemove, el.mm = function(e, scroller) { - scroller = el.scroller||el; + scroller = el.scroller||el; if (pushed) { scroller.scrollLeft -= (- lastClientX + (lastClientX=e.clientX)); @@ -65,11 +102,24 @@ } }, 0 ); + + _window[addEventListener]( + touchmove, + el.tmm = function(e, scroller) { + scroller = el.scroller||el; + if (pushed) { + scroller.scrollLeft -= + (- lastClientX + (lastClientX=e.touches[0].clientX)); + scroller.scrollTop -= + (- lastClientY + (lastClientY=e.touches[0].clientY)); + } + }, 0 + ); })(dragged[i++]); } } - + if (_document.readyState == 'complete') { reset(); } else { @@ -77,5 +127,6 @@ } exports.reset = reset; + exports.off = off; }));