Vue移动框鼠标拖拽自定义指令

在Vue中通过自定义指令,实现指定的模块带有鼠标拖拽移动效果

// 移动框自定指令
Vue.directive("drag", {
  bind: (el) => {
    let initX = null;
    let initY = null;
    el.style.cursor = "move";//设置鼠标样式为移动
    // 创建一个div作为移动选择框
    let divHtml = document.createElement('div')
    divHtml.style.cssText = "width: 90%;height: 40px;position: absolute;top: 0;left: 0;z-index: 100000;";
    el.appendChild(divHtml)
    // 获取初始点击的位置
    el.addEventListener("mousedown", function (e) {
      let curX = 0;
      let curY = 0;
      let str = el.style.transform.trim();
      if (str) {
        let reg = /\-?\d+/g;
        curX = Number(reg.exec(str));
        curY = Number(reg.exec(str));
      }
      initX = e.pageX - curX;
      initY = e.pageY - curY;
      // 鼠标移动事件设置移动位置
      document.addEventListener("mousemove", moveEle);
    });
    // 设置当前位置
    function moveEle(e) {
      el.style.transform = `translate(${e.pageX - initX}px,${e.pageY - initY}px)`;
    }
    // 鼠标松开移出方法
    document.addEventListener("mouseup", function () {
      document.removeEventListener("mousemove", moveEle);
    });
  },
  // 指令销毁
  unbind: (el) => {
    el.style.transform = "";
  },
});

使用

在new Vue之前定义该指令,使用时在模块中使用v-drag指令即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龟中的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值