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+iview实现文件上传
Nov 17 Vue.js
Vue项目如何引入bootstrap、elementUI、echarts
Nov 26 Vue.js
如何实现vue的tree组件
Dec 03 Vue.js
详解如何在vue+element-ui的项目中封装dialog组件
Dec 11 Vue.js
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
Dec 25 Vue.js
详解gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)
Nov 27 Vue.js
vue项目中的支付功能实现(微信支付和支付宝支付)
Feb 18 Vue.js
Vue3中toRef与toRefs的区别
Mar 24 Vue.js
教你部署vue项目到docker
Apr 05 Vue.js
vue组件vue-esign实现电子签名
Apr 21 Vue.js
vue elementUI批量上传文件
Apr 26 Vue.js
vue3 自定义图片放大器效果的示例代码
Jul 23 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脚本的10个技巧(6)
2006/10/09 PHP
PHP中去掉字符串首尾空格的方法
2012/05/19 PHP
php开启openssl的方法
2014/05/15 PHP
简单说说PHP优化那些事(经验分享)
2014/11/27 PHP
PHP getallheaders无法获取自定义头(headers)的问题
2016/03/23 PHP
使用vs code编辑调试php配置的方法
2019/01/29 PHP
一个用javascript写的select支持上下键、首字母筛选以及回车取值的功能
2009/09/09 Javascript
javascript 数字格式化输出的实现代码
2013/12/10 Javascript
Javascript中的return作用及javascript return关键字用法详解
2015/11/05 Javascript
jQuery中inArray方法注意事项分析
2016/01/25 Javascript
如何高效率去掉js数组中的重复项
2016/04/12 Javascript
浅谈通过JS拦截 pushState和replaceState事件
2017/07/21 Javascript
JavaScript代码执行的先后顺序问题
2017/10/29 Javascript
Vue监听一个数组id是否与另一个数组id相同的方法
2018/09/26 Javascript
ES6如何用一句代码实现函数的柯里化
2020/01/18 Javascript
echarts浮动显示单位的实现方法示例
2020/12/04 Javascript
python实现百度关键词排名查询
2014/03/30 Python
python获取指定目录下所有文件名列表的方法
2015/05/20 Python
Python3安装Pymongo详细步骤
2017/05/26 Python
python破解zip加密文件的方法
2018/05/31 Python
Python中GeoJson和bokeh-1的使用讲解
2019/01/03 Python
python3 tkinter实现点击一个按钮跳出另一个窗口的方法
2019/06/13 Python
解决django同步数据库的时候app models表没有成功创建的问题
2019/08/09 Python
Python字典推导式将cookie字符串转化为字典解析
2019/08/10 Python
Django自带日志 settings.py文件配置方法
2019/08/30 Python
selenium WebDriverWait类等待机制的实现
2020/03/18 Python
python连接mysql数据库并读取数据的实现
2020/09/25 Python
python 模拟登陆github的示例
2020/12/04 Python
html5-canvas中使用clip抠出一个区域的示例代码
2018/05/25 HTML / CSS
医学专业毕业生个人的求职信
2013/12/04 职场文书
2015年高三班主任工作总结
2015/05/21 职场文书
辣妈辣妹观后感
2015/06/10 职场文书
风之谷观后感
2015/06/11 职场文书
学生病假条怎么写
2015/08/17 职场文书
大学生活委员竞选稿
2015/11/21 职场文书
微信小程序 WeUI扩展组件库的入门教程
2022/04/21 Javascript