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 的 v-model用法实例
Nov 23 Vue.js
vue项目中openlayers绘制行政区划
Dec 24 Vue.js
vue 动态生成拓扑图的示例
Jan 03 Vue.js
基于vue的video播放器的实现示例
Feb 19 Vue.js
vue前端和Django后端如何查询一定时间段内的数据
Feb 28 Vue.js
Vue + iView实现Excel上传功能的完整代码
Jun 22 Vue.js
vue3获取当前路由地址
Feb 18 Vue.js
Vue组件更新数据v-model不生效的解决
Apr 02 Vue.js
教你部署vue项目到docker
Apr 05 Vue.js
vue @click.native 绑定原生点击事件
Apr 22 Vue.js
如何vue使用el-table遍历循环表头和表体数据
Apr 26 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代码解析
2016/06/24 PHP
php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】
2017/04/18 PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
2017/08/01 PHP
laravel 验证错误信息到 blade模板的方法
2019/09/29 PHP
PHP之多条件混合筛选功能的实现方法
2019/10/09 PHP
让 JavaScript 轻松支持函数重载 (Part 2 - 实现)
2009/08/04 Javascript
用jquery实现自定义风格的滑动条实现代码
2011/04/26 Javascript
基于jquery实现图片广告轮换效果代码
2011/07/07 Javascript
JS控制阿拉伯数字转为中文大写示例代码
2013/09/04 Javascript
js控制input框只读实现示例
2014/01/20 Javascript
javascript的tab切换原理与效果实现方法
2015/01/10 Javascript
JS实现先显示大图后自动收起显示小图的广告代码
2015/09/04 Javascript
JavaScript设置、获取、清除单值和多值cookie的方法
2015/11/17 Javascript
js实现继承的5种方式
2015/12/01 Javascript
详解JavaScript逻辑And运算符
2015/12/04 Javascript
JavaScript中removeChild 方法开发示例代码
2016/08/15 Javascript
js enter键激发事件实例代码
2016/08/17 Javascript
jQuery简单倒计时效果完整示例
2016/09/20 Javascript
AngularJS指令用法详解
2016/11/02 Javascript
Vue.2.0.5实现Class 与 Style 绑定的实例
2017/06/20 Javascript
JS运动特效之任意值添加运动的方法分析
2018/01/24 Javascript
使用vue-cli(vue脚手架)快速搭建项目的方法
2018/05/21 Javascript
Vue中的v-for指令不起效果的解决方法
2018/09/27 Javascript
教你如何编写Vue.js的单元测试的方法
2018/10/17 Javascript
vuex 解决报错this.$store.commit is not a function的方法
2018/12/17 Javascript
基于layui内置模块(element常用元素的操作)
2019/09/20 Javascript
原生javascript实现类似vue的数据绑定功能示例【观察者模式】
2020/02/24 Javascript
[38:30]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场2
2014/05/24 DOTA
关于反爬虫的一些简单总结
2017/12/13 Python
python打包压缩、读取指定目录下的指定类型文件
2018/04/12 Python
用ldap作为django后端用户登录验证的实现
2020/12/07 Python
爱尔兰电子产品购物网站:Komplett.ie
2018/04/04 全球购物
年终晚会活动方案
2014/08/21 职场文书
课外活动总结
2015/02/04 职场文书
读书笔记怎么写
2015/07/01 职场文书
MySQL脏读,幻读和不可重复读
2022/05/11 MySQL