美文网首页
vue拖拽、拖放、移动元素

vue拖拽、拖放、移动元素

作者: Gaochengxin | 来源:发表于2020-06-28 11:17 被阅读0次

方法一:

   <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';
},

相关文章

  • vue拖拽、拖放、移动元素

    方法一: 方法二:

  • 拖拽API

    实现拖拽效果 目前实现拖拽效果 HTML5拖拽 源元素事件例子 目标元素事件 从本地拖放图片到页面中 实现拖拽

  • 原生拖拽,拖放事件(drag and drop)

    拖拽,拖放事件可以通过拖拽实现数据传递,达到良好的交互效果,如:从操作系统拖拽文件实现文件选择,拖拽实现元素布局的...

  • 拖拽-12.19

    1.源元素事件(要拖拽的文件) 2.目标元素事件(要拖拽到哪里去) HTML页面默认不允许拖放,称之为HTML页面...

  • HTML5 拖放Drag 和 drop用法以及事件介绍

    设置元素为可拖放 首先,为了使元素可拖动,把 draggable 属性设置为 true : 拖拽事件 有时可能为了...

  • 封装移动端 vue 拖拽指令

    封装移动端 vue 拖拽指令 通过vue自定义指令,将拖拽行为封装为指令 使用transform做移动效果,需要注...

  • HTML5新特性 拖拽使用心得

    HTML5新特性 拖拽使用心得 本文主要介绍了拖拽和拖放的几个属性 先构建一个框架 draggable 为了使元素...

  • 前端面试05:说一下 HTML5 drag api

    dragstart:事件主体是被拖放元素,在开始拖放被拖放元素时触发。 darg:事件主体是被拖放元素,在正在拖放...

  • vue拖拽元素

    实现目的 代码 实现鼠标按住title可以拖拽set模块。 drag.js 参数e是鼠标点击event,参数a是需...

  • 总结

    1,1)移动端拖拽vue-draggablehttp://www.itxst.com/vue-draggable/...

网友评论

      本文标题:vue拖拽、拖放、移动元素

      本文链接:https://www.haomeiwen.com/subject/sflgzhtx.html