vue 自定义移动函数

首先在要移动的div上添加v-drage

<div class="tool" v-drag></div>

然后在vue实例里面跟method添加如下代码:

directives: {
    drag(el, bindings) {
      el.onmousedown = function(e) {
      // 这个是移动的范围元素
        var parent = document.getElementById("main");
        // 计算移动元素最大可移动的left、top,限制其移除框外
        var maxLeft = parent.offsetWidth - el.offsetWidth;
        var maxTop = parent.offsetHeight - el.offsetHeight;
        if (e.target == el) {
        // 计算移动元素需要减去的部分,60是我的限制框距离body的最左边的宽度,e.offsetX是鼠标点击的位置距离移动元素左边框的距离
          var disx = 60 + e.offsetX;
          var disy = 40 + e.offsetY;
          document.onmousemove = function(e) {
            if (e.clientX - disx < 0) {
              el.style.left = 0;
            } else if (e.clientX - disx > 0 && e.clientX - disx < maxLeft) {
              el.style.left = e.clientX - disx + "px";
            } else {
              el.style.left = maxLeft + "px";
            }
            if (e.clientY - disy < 0) {
              el.style.top = 0;
            } else if (e.clientY - disy > 0 && e.clientY - disy < maxTop) {
              el.style.top = e.clientY - disy + "px";
            } else {
              el.style.top = maxTop + "px";
            }
          };
          document.onmouseup = function() {
            document.onmousemove = document.onmouseup = null;
          };
        }
      };
    }
  }

移动时可在mounted函数里面添加如下代码,防止移动选中文字

document.onselectstart = function() {
      return false;
    };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值