vue实现拖拽交换位置


Posted in Vue.js onApril 07, 2022

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

<template>
  <div class="root">
    <transition-group tag="div" class="container">
      <div
        class="item"
        :class="'item' + i"
        v-for="(item, i) in items"
        :key="item.key"
        :style="{ 'background-color': item.color, border: '1px solid' }"
        draggable="true"
        @dragstart="handleDragStart($event, item)"
        @dragover.prevent="handleDragOver($event, item)"
        @dragenter="handleDragEnter($event, item)"
        @dragend="handleDragEnd($event, item)"
      >
        <div>{{ item }}</div>
      </div>
    </transition-group>
  </div>
</template>
 
<script>
export default {
  name: "Toolbar",
  data() {
    return {
      items: [
        { key: 1, color: "#3883a0" },
        { key: 2, color: "#4883a0" },
        { key: 3, color: "#5883a0" },
        { key: 4, color: "#6883a0" },
        { key: 5, color: "#7883a0" },
        { key: 6, color: "#8883a0" },
        { key: 7, color: "#9883a0" },
      ],
      ending: null,
      dragging: null,
    };
  },
  methods: {
    handleDragStart(e, item) {
      this.dragging = item;
    },
    handleDragEnd(e, item) {
      if (this.ending.key === this.dragging.key) {
        return;
      }
      let newItems = [...this.items];
      const src = newItems.indexOf(this.dragging);
      const dst = newItems.indexOf(this.ending);
      newItems.splice(src, 1, ...newItems.splice(dst, 1, newItems[src]));
      console.log(newItems);
 
      this.items = newItems;
      this.$nextTick(() => {
        this.dragging = null;
        this.ending = null;
      });
    },
    handleDragOver(e) {
      // 首先把div变成可以放置的元素,即重写dragenter/dragover
      // 在dragenter中针对放置目标来设置
      e.dataTransfer.dropEffect = "move";
    },
    handleDragEnter(e, item) {
      // 为需要移动的元素设置dragstart事件
      e.dataTransfer.effectAllowed = "move";
      this.ending = item;
    },
  },
};
</script>
 
<style lang="less" scoped>
.container {
  display: flex;
  flex-wrap: wrap;
}
.item {
  width: 200px;
  height: 200px;
  margin: 10px;
  color: #fff;
  transition: all linear 0.3s;
}
.item0 {
  width: 400px;
}
</style>

效果

vue实现拖拽交换位置

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

Vue.js 相关文章推荐
详解vue实现坐标拾取器功能示例
Nov 18 Vue.js
如何实现vue的tree组件
Dec 03 Vue.js
Vue——前端生成二维码的示例
Dec 19 Vue.js
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
Jan 08 Vue.js
Vue实现一种简单的无限循环滚动动画的示例
Jan 10 Vue.js
Vue仿Bibibili首页的问题
Jan 21 Vue.js
Vue接口封装的完整步骤记录
May 14 Vue.js
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
May 25 Vue.js
springboot+VUE实现登录注册
May 27 Vue.js
Vue中插槽slot的使用方法与应用场景详析
Jun 08 Vue.js
Vue自定义铃声提示音组件的实现
Jan 22 Vue.js
vue中控制mock在开发环境使用,在生产环境禁用方式
Apr 06 Vue.js
Vue.Draggable实现交换位置
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
vue cli4中mockjs在dev环境和build环境的配置详情
vue中控制mock在开发环境使用,在生产环境禁用方式
Apr 06 #Vue.js
vue3使用vuedraggable实现拖拽功能
vue整合百度地图显示指定地点信息
vue中使用mockjs配置和使用方式
You might like
微盾PHP脚本加密专家php解密算法
2020/09/13 PHP
PHP验证码类代码( 最新修改,完全定制化! )
2010/12/02 PHP
ThinkPHP缓存方法S()概述
2014/06/13 PHP
jquery+php+ajax显示上传进度的多图片上传并生成缩略图代码
2014/10/15 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
PHP面向对象类型约束用法分析
2019/06/12 PHP
jquery 模式对话框终极版实现代码
2009/09/28 Javascript
Jquery 扩展方法
2010/05/06 Javascript
js中访问html中iframe的文档对象的代码[IE6,IE7,IE8,FF]
2011/01/08 Javascript
javascript和jquery修改a标签的href属性
2013/12/16 Javascript
简介JavaScript中strike()方法的使用
2015/06/08 Javascript
jQuery网页版打砖块小游戏源码分享
2015/08/20 Javascript
JavaScript 控制字体大小设置的方法
2016/11/23 Javascript
AngulaJS路由 ui-router 传参实例
2017/04/28 Javascript
nodejs实现解析xml字符串为对象的方法示例
2018/03/14 NodeJs
JavaScript实现的DOM树遍历方法详解【二叉DOM树、多叉DOM树】
2018/05/07 Javascript
React Native开发封装Toast与加载Loading组件示例
2018/09/08 Javascript
Vue动态组件与异步组件实例详解
2019/02/23 Javascript
关于vue路由缓存清除在main.js中的设置
2019/11/06 Javascript
react基本安装与测试示例
2020/04/27 Javascript
解决vue使用vant轮播组件swipe + flex时文字抖动问题
2021/01/07 Vue.js
小程序实现列表倒计时功能
2021/01/29 Javascript
[54:15]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第二场2月1日
2021/03/11 DOTA
详解python的ORM中Pony用法
2018/02/09 Python
python学生管理系统开发
2019/01/30 Python
Python3安装Pillow与PIL的方法
2019/04/03 Python
python求平均数、方差、中位数的例子
2019/08/22 Python
Python时间差中seconds和total_seconds的区别详解
2019/12/26 Python
Python调用OpenCV实现图像平滑代码实例
2020/06/19 Python
澳大利亚头发和美容产品购物网站:OZ Hair & Beauty
2020/03/27 全球购物
Android笔试题总结
2014/11/29 面试题
搬家公司的创业计划书
2014/01/01 职场文书
2014年宣传部个人工作总结
2014/12/06 职场文书
初中作文评语
2014/12/25 职场文书
HTML怎么设置下划线?html文字加下划线方法
2021/12/06 HTML / CSS
数据分析数据库ClickHouse在大数据领域应用实践
2022/04/03 MySQL