vue拖拽、拖放、移动元素

2020-06-28  本文已影响0人  Gaochengxin

方法一:

   <div :class="mapbig? 'contright bigbox':'contright'" 
          ref="contmap" @mousedown="move($event,mapbig)">
           <div class="title">数据展示 </div><div class="item" 
     @mousedown.stop="move($event,false)">    <--子元素阻止继承父元素事件-->
  </div></div>
   move(e,s){
    if(s){   //需要拖拽的元素传true
     let odiv = e.target;        //获取目标元素
    //算出鼠标相对元素的位置
    let disX = e.clientX - odiv.offsetLeft;
    let disY = e.clientY - odiv.offsetTop;
    document.onmousemove = (e)=>{       //鼠标按下并移动的事件
    //用鼠标的位置减去鼠标相对元素的位置,得到元素的位置
    let left = e.clientX - disX;
    let top = e.clientY - disY;

    //绑定元素位置到positionX和positionY上面
    this.positionX = top;
    this.positionY = left;

    //移动当前元素
    odiv.style.left = left + 'px';
    odiv.style.top = top + 'px';
  };
  document.onmouseup = (e) => {
    document.onmousemove = null;
    document.onmouseup = null;
  };
  }
},

方法二:

   <div class="conts" ref="dragBox" @touchstart.stop="touchstartHandle('dragBox',$event, true)" 
    @touchmove.stop="touchmoveHandle('dragBox',$event, true)">
  </div>
 touchstartHandle(refName, e, flag) { // 传false不拖拽
  if (!flag) {
    return false;
  };
  let element = e.targetTouches[0];
  // 记录点击的坐标
  this.coordinate.client = {
    x: element.clientX,
    y: element.clientY
  };
  // 记录需要移动的元素坐标
  this.coordinate.elePosition.left = this.$refs[refName].offsetLeft;
  this.coordinate.elePosition.top = this.$refs[refName].offsetTop;
},
touchmoveHandle(refName, e, flag) {
  if (!flag) {
    return false;
  };
  let element = e.targetTouches[0];
  // 根据初始 client 位置计算移动距离(元素移动位置=元素初始位置+光标移动后的位置-光标点击时的初始位置)
  let x = this.coordinate.elePosition.left + (element.clientX - this.coordinate.client.x);
  let y = this.coordinate.elePosition.top + (element.clientY - this.coordinate.client.y);
  // 限制可移动距离,不超出可视区域
  x = x <= 0 ? 0 : x >= innerWidth - this.$refs[refName].offsetWidth ? innerWidth - this.$refs[refName].offsetWidth : x;
  y = y <= 45 ? 45 : y >= this.$refs[refName].offsetHeight - 50 ? this.$refs[refName].offsetHeight - 10 : y;
  // 移动当前元素
  this.$refs[refName].style.left = x + 'px';
  this.$refs[refName].style.top = y + 'px';
},
上一篇下一篇

猜你喜欢

热点阅读