>  기사  >  웹 프론트엔드  >  Vue 기반 드래그 앤 드롭 기능 구현

Vue 기반 드래그 앤 드롭 기능 구현

不言
不言원래의
2018-05-07 14:49:111481검색

이 글에서는 드래그 앤 드롭 기능을 자세히 구현하기 위해 Vue를 주로 소개합니다. 블록을 드래그하여 이동하는 것은 특정 참조 값을 갖습니다. 관심 있는 친구들은 이를 참고할 수 있습니다.

이 글의 예는 Vue의 드래그 앤 드롭 기능을 모든 사람과 공유합니다. 구체적인 내용은 다음과 같습니다

Rendering:

HTML code:

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

JS code:

Vue.directive(&#39;drag&#39;,//自定义指令                   

    {bind:function (el, binding) {
        let op = el;  //当前元素
        let self = this; //上下文
        op.onmousedown = function (e) {
         //鼠标按下,计算当前元素距离可视区的距离
          let disX = e.clientX - op.offsetLeft;
          let disY = e.clientY - op.offsetTop;

          document.onmousemove = function (e) {
           //通过事件委托,计算移动的距离 
            let l = e.clientX - disX;
            let t = e.clientY - disY;
           //移动当前元素 
            op.style.left = l + &#39;px&#39;;
            op.style.top = t + &#39;px&#39;;
             //将此时的位置传出去
            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: &#39;#box&#39;,
      data: {
        val: &#39;123&#39;,
        style: {
          width: &#39;100px&#39;,
          height: &#39;100px&#39;,
          background: &#39;aqua&#39;,
          position: &#39;absolute&#39;,
          right: &#39;30px&#39;,
          top: 0
        }
      },
      methods:{
      //接受传来的位置数据,并将数据绑定给data下的val
        greet(val){
          vm.val = val;
        }
      } ,
   });
  }

관련 추천:

뷰 -simplemde 이미지 드래그 및 붙여넣기 기능 구현(코드 포함)

vue.js 및 webpack을 기반으로 한 채팅 예제

위 내용은 Vue 기반 드래그 앤 드롭 기능 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.