javascript拖拽元素交换位置

  1. html
<div class="tabsBox">
     <div v-for="(item,index) in navOption" :key="item.linkedUrl" class="tabItem" 		 
     :draggable="true" 
     @dragstart="onDragStart($event)" 
     @dragover="onDragOver($event)" 
     @drop="onDrop($event)">
       <div class="imgbox">
         <img class="imgs" :src="imgAdderss + item.picturePath" alt="" />
         <p>{{ item.name}}</p>
       </div>
     </div>
   </div>
  1. js
    draggable 拖拽属性
    ondragstart: 当开始拖动元素时触发。
    ondragover: 当拖动元素进入可放下的对象区域时触发。
    ondrop: 当拖动元素被放下时触发。
   onDragStart(e) {
    // 获取当前拖拽元素, 暂存拖拽元素
     this.dragElement = e.currentTarget
   },
   onDragOver(e) {
     // 默认的当你dragover的时候会阻止你做drop的操作,所以需要取消这个默认
     e.preventDefault()
   },
   onDrop(e) {
     // 当拖动结束的时候,给拖动div所在的位置下面的div做drop事件
     let dropElement = e.currentTarget
     if (this.dragElement != null && this.dragElement != dropElement) {
       let parentBox = document.querySelector('.tabsBox')
       // 临时 div 用于存储 box
       let temp = document.createElement('tabItem')
       // 添加 temp 到父元素 parentBox 中
       parentBox.appendChild(temp)
       // 交换
       parentBox.replaceChild(temp, dropElement)
       parentBox.replaceChild(dropElement, this.dragElement)
       parentBox.replaceChild(this.dragElement, temp)
     }
   },
  1. css
.tabsBox{
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-start;
  cursor: pointer;
  position: absolute;
  padding: 10px 20px;
  height: 600px;
  overflow-y: auto;
}
/* 滚动条样式 */
.tabsBox::-webkit-scrollbar {
  width: 6px; /*高宽分别对应横竖滚动条的尺寸*/
  height: 6px;
}
.tabsBox::-webkit-scrollbar-thumb {
  border-radius: 6px;
  background: rgba(144, 147, 153, 0.5);
}
.tabsBox::-webkit-scrollbar-track {
  border-radius: 5px;
  background: transparent;
}
.tabItem{
  margin: 20px 40px;
  border-radius: 8px;
  border: 2px solid #3a6196;
  box-sizing: border-box;
  display: flex;
  width: 325px;
  height: 210px;
  overflow: hidden;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值