v-dragged
Version:
Vue directive plugin for advanced drag event detection.
9 lines (8 loc) • 2.97 kB
JavaScript
/*
* v-dragged v0.0.5
* https://github.com/zhanziyang/v-dragged
*
* Copyright (c) 2017 zhanziyang
* Released under the ISC license
*/
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.VDragged=t()}(this,function(){"use strict";function e(e){if(null===e||void 0===e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}var t,n=Object.getOwnPropertySymbols,r=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable,i=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map(function(e){return t[e]}).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach(function(e){r[e]=e}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(t,i){for(var s,c,u=e(t),l=1;l<arguments.length;l++){s=Object(arguments[l]);for(var a in s)r.call(s,a)&&(u[a]=s[a]);if(n){c=n(s);for(var d=0;d<c.length;d++)o.call(s,c[d])&&(u[c[d]]=s[c[d]])}}return u},s={addEventListeners:function(e,t,n){for(var r=0,o=t.length;r<o;r++)e.addEventListener(t[r],n)},removeEventListeners:function(e,t,n){for(var r=0,o=t.length;r<o;r++)e.removeEventListener(t[r],n)},getPointer:function(e){return e.touches&&e.touches[0]?e.touches[0]:e.changedTouches&&e.changedTouches[0]?e.changedTouches[0]:e}},c=["mousedown","touchstart"],u=["mousemove","touchmove"],l=["mouseup","touchend"],a={inserted:function(e,n,r){function o(r){d&&r.preventDefault();var o=s.getPointer(r);e.lastCoords=e.firstCoords={x:o.clientX,y:o.clientY},n.value({el:e,first:!0,clientX:o.clientX,clientY:o.clientY}),t=e}function i(r){if(d&&r.preventDefault(),e===t){e.lastCoords=null;var o=s.getPointer(r);n.value({el:e,last:!0,clientX:o.clientX,clientY:o.clientY}),t=null}}function a(r){if(d&&r.preventDefault(),e===t){var o=s.getPointer(r);if(e.lastCoords){var i=o.clientX-e.lastCoords.x,c=o.clientY-e.lastCoords.y,u=o.clientX-e.firstCoords.x,l=o.clientY-e.firstCoords.y,a=o.clientX,f=o.clientY;n.value({el:e,deltaX:i,deltaY:c,offsetX:u,offsetY:l,clientX:a,clientY:f}),e.lastCoords={x:o.clientX,y:o.clientY}}}}if(document){var d=!!n.modifiers.prevent;s.addEventListeners(e,c,o),s.addEventListeners(document.documentElement,l,i),s.addEventListeners(document.documentElement,u,a)}},unbind:function(e){s.removeEventListeners(e,c),s.removeEventListeners(document.documentElement,l),s.removeEventListeners(document.documentElement,u)}},d={};return{install:function(e,t){t=i({},d,t);var n=Number(e.version.split(".")[0]),r=Number(e.version.split(".")[1]);if(n<2&&r<1)throw new Error("v-dragged supports vue version 2.1 and above. You are using Vue@"+e.version+". Please upgrade to the latest version of Vue.");e.directive("dragged",a)},directive:a}});