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标签

 

posted @ 2021-12-15 15:28  Jennyishere  阅读(205)  评论(0)    收藏  举报