欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

基于Vue实现拖拽功能

程序员文章站 2022-05-20 09:46:31
本文实例为大家分享了vue实现拖拽功能的具体代码,供大家参考,具体内容如下 效果图: html代码:
...

本文实例为大家分享了vue实现拖拽功能的具体代码,供大家参考,具体内容如下

效果图:

基于Vue实现拖拽功能

html代码:

<div id="box">                           
  位置
  <br>x:{{val.x}} <br>y:{{val.y}}
  <div v-drag="greet" id="drag" :style="style">
  //注意这里要通过指令绑定函数将当前元素的位置数据传出来
  </div>
</div>

js代码:

vue.directive('drag',//自定义指令                   

    {bind:function (el, binding) {
        let odiv = el;  //当前元素
        let self = this; //上下文
        odiv.onmousedown = function (e) {
         //鼠标按下,计算当前元素距离可视区的距离
          let disx = e.clientx - odiv.offsetleft;
          let disy = e.clienty - odiv.offsettop;

          document.onmousemove = function (e) {
           //通过事件委托,计算移动的距离 
            let l = e.clientx - disx;
            let t = e.clienty - disy;
           //移动当前元素 
            odiv.style.left = l + 'px';
            odiv.style.top = t + 'px';
             //将此时的位置传出去
            binding.value({x:e.pagex,y:e.pagey})
          };
          document.onmouseup = function (e) {
          
            document.onmousemove = null;
            document.onmouseup = null;
           };
        };
      }
    }
  );
  window.onload = function () {
    let vm = new vue({
      el: '#box',
      data: {
        val: '123',
        style: {
          width: '100px',
          height: '100px',
          background: 'aqua',
          position: 'absolute',
          right: '30px',
          top: 0
        }
      },
      methods:{
      //接受传来的位置数据,并将数据绑定给data下的val
        greet(val){
          vm.val = val;
        }
      } ,
   });
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。