1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- /**
- * @fileoverview dragscroll - scroll area by dragging
- * @version 0.0.8
- *
- * @license MIT, see http://github.com/asvd/dragscroll
- * @copyright 2015 asvd <heliosframework@gmail.com>
- */
- (function (root, factory) {
- if (typeof define === 'function' && define.amd) {
- define(['exports'], factory);
- } else if (typeof exports !== 'undefined') {
- factory(exports);
- } else {
- factory((root.dragscroll = {}));
- }
- }(this, function (exports) {
- var _window = window;
- var _document = document;
- var mousemove = 'mousemove';
- var mouseup = 'mouseup';
- var mousedown = 'mousedown';
- var EventListener = 'EventListener';
- var addEventListener = 'add'+EventListener;
- var removeEventListener = 'remove'+EventListener;
- var newScrollX, newScrollY;
- var dragged = [];
- var reset = function(i, el) {
- for (i = 0; i < dragged.length;) {
- el = dragged[i++];
- el = el.container || el;
- el[removeEventListener](mousedown, el.md, 0);
- _window[removeEventListener](mouseup, el.mu, 0);
- _window[removeEventListener](mousemove, el.mm, 0);
- }
- // cloning into array since HTMLCollection is updated dynamically
- dragged = [].slice.call(_document.getElementsByClassName('dragscroll'));
- for (i = 0; i < dragged.length;) {
- (function(el, lastClientX, lastClientY, pushed, scroller, cont){
- (cont = el.container || el)[addEventListener](
- mousedown,
- cont.md = function(e) {
- if (!el.hasAttribute('nochilddrag') ||
- _document.elementFromPoint(
- e.pageX, e.pageY
- ) == cont
- ) {
- pushed = 1;
- lastClientX = e.clientX;
- lastClientY = e.clientY;
- e.preventDefault();
- }
- }, 0
- );
- _window[addEventListener](
- mouseup, cont.mu = function() {pushed = 0;}, 0
- );
- _window[addEventListener](
- mousemove,
- cont.mm = function(e) {
- if (pushed) {
- (scroller = el.scroller||el).scrollLeft -=
- newScrollX = (- lastClientX + (lastClientX=e.clientX));
- scroller.scrollTop -=
- newScrollY = (- lastClientY + (lastClientY=e.clientY));
- if (el == _document.body) {
- (scroller = _document.documentElement).scrollLeft -= newScrollX;
- scroller.scrollTop -= newScrollY;
- }
- }
- }, 0
- );
- })(dragged[i++]);
- }
- }
-
- if (_document.readyState == 'complete') {
- reset();
- } else {
- _window[addEventListener]('load', reset, 0);
- }
- exports.reset = reset;
- }));
|