ue自定义指令——v可拖拽的弹窗
新建一个js文件放指令文件夹
import Vue from "vue"; const drag = Vue.directive("drag", { //只执行一次 bind: function(el, bind) { el.style.cursor = "move"; //鼠标样式变move样式 }, //inserted函数表示当绑定了该指令的元素被插入到dom时候会自动触发 inserted: function (el) { //鼠标落下 el.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; //设置成5是为了不离边缘太近 } else if (left > document.documentElement.clientWidth - el.clientWidth) { //document.documentElement.clientWidth 屏幕的可视宽度 left = document.documentElement.clientWidth - el.clientWidth - 5 } if (top <= 0) { top = 5; } else if (top > document.documentElement.clientHeight - el.clientHeight) { top = document.documentElement.clientHeight - el.clientHeight - 5 } el.style.left = left + 'px'; el.style.top = top + 'px'; } document.onmouseup = function () { document.onmousemove = document.onmouseup = null; } } }, //当VNode更新的时候会执行updated,可以触发多次 updated: function(el) {} }); export default drag;
使用:全局引入或者局部引入
在需要拖拽的盒子上加v-drag标签