import Vue from 'vue' const drag = Vue.directive('drag', { bind (el, binding, vnode, oldVnode) { const dialogHeaderEl = el.querySelector('.public-bounced-title') dialogHeaderEl.onmousedown = function (e) { var distX = e.pageX - el.offsetLeft var distY = e.pageY - el.offsetTop if (e.preventDefault) { e.preventDefault() } else { e.returnValue = false } document.onmousemove = function (e) { let left = e.clientX - distX let top = e.clientY - distY if (left <= 0) { left = 5 } else if (left > document.documentElement.clientWidth - dialogHeaderEl.clientWidth) { left = document.documentElement.clientWidth - dialogHeaderEl.clientWidth - 5 } if (top <= 0) { top = 5 } else if (top > document.documentElement.clientHeight - dialogHeaderEl.clientHeight) { top = document.documentElement.clientHeight - dialogHeaderEl.clientHeight - 5 } el.style.left = left + 'px' el.style.top = top + 'px' } document.onmouseup = function () { document.onmousemove = document.onmouseup = null } } } }) export default drag