自定义指令-v-drag拖拽

如果想注册局部指令,组件中也接受一个 directives 的选项:

directives: {
  drag: {
    // 指令的定义
    bind: function (el, binding, vnode) {
      // el 代表绑定的dom对象,可以修改
      // binding 是一个对象,不可修改
      // vnode代表的是这个vue实例,不可修改
    }
  }
}

然后你可以在模板中任何元素上使用新的 v-focus 属性

<div v-drag></div>

一个指令定义对象可以提供多个钩子函数,本次只需要bind即可:
例子代码:

<div v-drag></div>


directives:{
            drag:{
                bind: function (el, binding, vnode) {
                    el.onmousedown = function(e){
                        var disx = e.clientX - el.offsetLeft;
                        var disy = e.clientY - el.offsetTop;

                        document.onmousemove = function (e){
                            let left = e.clientX - disx;
                            let top = e.clientY - disy;

                            el.style.left = left+'px';
                            el.style.top = top+'px';


                        }
                        document.onmouseup = function(){                      
                            document.onmousemove = document.onmouseup = null;
                        }
                    }
                    
                },

            }
        }
原文地址:https://www.cnblogs.com/shemingxin/p/14034293.html