VUE面板拖动

在网上查了查,多多少少总有些问题,就自己写了一个。话不多说,上代码。

分为两种拖动方法:

一、点击事件拖动

<div class="processpanel" @mousedown="mousedown">
mousedown(e0) {
      debugger;
      var p = document.getElementsByClassName("processpanel");
      //鼠标按下时面板左上角的位置
      var pl = p[0].offsetLeft;
      var pt = p[0].offsetTop;
      document.onmousemove = function (e1) {
              document.documentElement.style.cursor = "move";//鼠标变成十字架
        //鼠标移动的距离
        var l = e0.clientX - e1.clientX;
        var t = e0.clientY - e1.clientY;
        //防止鼠标点击与拖拽冲突
        var d = Math.sqrt(l * l + t * t);
        if (d > 7) {
          p[0].style.left = pl - l + "px";
          p[0].style.top = pt - t + "px";
        } else {
          p[0].style.left = p[0].offsetLeft;
          p[0].style.top = p[0].offsetTop;
        }
      }.bind(this);
      document.onmouseup = function (e) {
        document.onmousemove = null;
        document.onmouseup = null;
        document.documentElement.style.cursor = "";//恢复鼠标样式
      };
    },

二、指令拖动

<div class="processpanel" v-drag>
// 指令
  directives: {
    //拖拽指令
    drag(p) {
      p.onmousedown = function (e0) {
        //鼠标按下时面板左上角的位置
        var pl = p.offsetLeft;
        var pt = p.offsetTop;
        document.onmousemove = function (e1) {
          document.documentElement.style.cursor = "move";
          //鼠标移动的距离
          var l = e0.clientX - e1.clientX;
          var t = e0.clientY - e1.clientY;
          //防止鼠标点击与拖拽冲突
          var d = Math.sqrt(l * l + t * t);
          if (d > 7) {
            p.style.left = pl - l + "px";
            p.style.top = pt - t + "px";
          } else {
            p.style.left = p.offsetLeft;
            p.style.top = p.offsetTop;
          }
        }.bind(this);
        document.onmouseup = function () {
          document.onmousemove = null;
          document.onmouseup = null;
          document.documentElement.style.cursor = "";
        };
      };
    },
  },
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值