-
Notifications
You must be signed in to change notification settings - Fork 0
/
lc-mouse-drag.min.js
11 lines (10 loc) · 1.48 KB
/
lc-mouse-drag.min.js
1
2
3
4
5
6
7
8
9
10
11
/**
* lc-mouseDrag.js - Vanilla javascript (ES6) function enabling drag scrolling on desktop
* Version: v1.0.1
* Author: Luca Montanari aka LCweb
* Website: https://lcweb.it
* Licensed under the MIT license
*/
(function(){if("function"==typeof window.lc_mouseDrag)return!0;window.lc_mouseDrag=function(p,d,f,g){d=void 0===d?.3:d;f=void 0===f?!1:f;g=void 0===g?!1:g;if(!p)return console.error("You must provide a valid selector or DOM object as first argument");var u=function(a){var e=f?!1:!0,q=g?!1:!0,h=!1,r=0,t=0,k=0,l=0,m=null;a.addEventListener("mousedown",function(b){b.preventDefault();h=!0;k=parseInt(a.scrollTop,10);l=parseInt(a.scrollLeft,10);r=b.clientY;t=b.clientX});a.addEventListener("mouseup",function(b){if(!d)return!0;
b=a.scrollTop;b+=-1*(k-b)*d;var c=a.scrollLeft;c+=-1*(l-c)*d;var n={behavior:"smooth"};q&&(n.top=b);e&&(n.left=c);m=a.scroll(n)});document.body.addEventListener("mouseup",function(b){h=!1});a.addEventListener("mousemove",function(b){if(!0===h){m&&m.pause();var c={behavior:"auto"};q&&(c.top=k+(r-b.clientY));e&&(c.left=l+(t-b.clientX));a.scroll(c)}})};(function(a){if("string"!=typeof a)return a instanceof Element?[a]:Object.values(a);(a.match(/(#[0-9][^\s:,]*)/g)||[]).forEach(function(e){a=a.replace(e,
'[id="'+e.replace("#","")+'"]')});return document.querySelectorAll(a)})(p).forEach(function(a){if(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent))return document.body.classList.add("lc_mousedrag_is_mobile"),!0;u(a)})}})();