Vue实现拖放排序功能的实例代码


Posted in Javascript onJuly 08, 2019

Vue中实现拖放排序,啥也不说,贴上代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<style>
ul {
min-height: 100px;
width: 200px;
margin: 20px auto;
background: #eee;
}
li {
min-height: 2em;
margin-top: 10px;
background: #abcded;
}
/ 组件过渡类 /
.drog-move {
transition: transform 1s;
}
</style>
<body>
<div id="app">
<transition-group name="drog" tag="ul">
  <li draggable="true" v-for="(item, index) in lists" @dragstart="dragStart($event, index)" @dragover="allowDrop" @drop="drop($event, index)" v-bind:key="item">{{item}}</li>
</transition-group>
</div>
</body>
<script src="vue.min.js"></script>
<script>
new Vue({
el: '#app',
data: {
  lists: ['1: apple', '2: banana', '3: orange', '4: melon']
},
methods: {
  //取消默认行为
  allowDrop(e){
    e.preventDefault();
  },
  //开始拖动
  dragStart(e, index){
    let tar = e.target;
    e.dataTransfer.setData('Text', index);
    if (tar.tagName.toLowerCase() == 'li') {
      // console.log('drag start')
      // console.log('drag Index: ' + index)
    }
  },
  //放置
  drop(e, index){
    this.allowDrop(e);
    // console.log('drop index: ' + index);
    //使用一个新数组重新排序后赋给原变量
    let arr = this.lists.concat([]),
      dragIndex = e.dataTransfer.getData('Text');
      temp = arr.splice(dragIndex, 1);
    arr.splice(index, 0, temp[0]);
    // console.log('sort');
    this.lists = arr;
  }
}
})
</script>

</html>

ps:下面看下vue 拖拽排序的实例代码,具体代码如下所示:

<template>
  <section class="main">
    <div class="drag-box-left">
      <div class="drag-title">拖动排序</div>
      <div class="drag-list" draggable="true"
        v-for="list in data1"
        :data-id="list.id"
        @dragstart="dragstartEvent"
        @dragend="dragendEvent"
        @dragenter="dragenterEvent"
        @dragleave="dragleaveEvent"
        @dragover="dragoverEvent"
      >{{list.title}}</div>
    </div>
  </section>
</template>
<script>
  export default {
    data() {
      return {
        dragElement: null,
        lock: true,
        data1: [
          {id: 1, title: '这里是列表1的标题'},
          {id: 2, title: '这里是列表2的标题'},
          {id: 3, title: '这里是列表3的标题'},
          {id: 4, title: '这里是列表4的标题'},
          {id: 5, title: '这里是列表5的标题'},
          {id: 6, title: '这里是列表6的标题'},
          {id: 7, title: '这里是列表7的标题'}
        ],
        data2: [
          {id: 1, title: '这里是列表11的标题'},
          {id: 2, title: '这里是列表12的标题'},
          {id: 3, title: '这里是列表13的标题'},
          {id: 4, title: '这里是列表14的标题'}
        ]
      }
    },
    methods: {
      dragstartEvent(ev) {
        const self = this;
        self.dragElement = ev.target;
        ev.target.style.backgroundColor = '#f8f8f8';
      },
      dragendEvent(ev) {
        ev.target.style.backgroundColor = '#fff';
        ev.preventDefault();
      },
      dragenterEvent(ev) {
        const self = this;
        if(self.dragElement != ev.target){
          ev.target.parentNode.insertBefore(self.dragElement, ev.target);
        }
      },
      dragleaveEvent(ev) {
        const self = this;
        if(self.dragElement != ev.target){
          if(self.lock && (ev.target == ev.target.parentNode.lastElementChild || ev.target == ev.target.parentNode.lastChild)){
            ev.target.parentNode.appendChild(self.dragElement);
            self.lock = false;
          }else{
            self.lock = true;
          }
        }
      },
      dragoverEvent(ev) {
        ev.preventDefault();
      }
    }
  }
</script>
<style scoped>
  .drag-box-left{
    float: left;
    width: 45%;
  }
  .drag-box-right{
    float: right;
    width: 45%;
  }
  .drag-list{
    border: 1px solid #ddd;
    padding:10px;
    margin-bottom: 20px;
    transition: border .3s;
  }
  .drag-list:hover{
    border: 1px solid #20a0ff;
  }
  .drag-title{
    font-weight: 400;
    line-height: 25px;
    margin: 10px 0;
    font-size: 22px;
    color: #1f2f3d;
  }
</style>

总结

以上所述是小编给大家介绍的Vue实现拖放排序功能的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
javascript 简单抽屉效果的实现代码
Mar 09 Javascript
简介JavaScript中substring()方法的使用
Jun 06 Javascript
jQuery实现textarea自动增长宽高的方法
Dec 18 Javascript
Jquery中巧用Ajax的beforeSend方法
Jan 20 Javascript
JavaScript面向对象编写购物车功能
Aug 19 Javascript
原生javascript上传图片带进度条【实例分享】
Apr 06 Javascript
vue 页面加载进度条组件实例
Feb 05 Javascript
jQuery中DOM操作原则实例分析
Aug 01 jQuery
vue实现多个echarts根据屏幕大小变化而变化实例
Jul 19 Javascript
JavaScript代码模拟鼠标自动点击事件示例
Aug 07 Javascript
vue-admin-template配置快捷导航的代码(标签导航栏)
Sep 04 Javascript
webpack介绍使用配置教程详解webpack介绍和使用
Jun 25 Javascript
JavaScript中Dom操作实例详解
Jul 08 #Javascript
JavaScript实现五子棋游戏的方法详解
Jul 08 #Javascript
ES6 Class中实现私有属性的一些方法总结
Jul 08 #Javascript
ElementUI Tag组件实现多标签生成的方法示例
Jul 08 #Javascript
利用不到200行代码写一款属于你自己的js类库
Jul 08 #Javascript
Vue中util的工具函数实例详解
Jul 08 #Javascript
详解基于 Node.js 的轻量级云函数功能实现
Jul 08 #Javascript
You might like
PHP循环输出指定目录下的所有文件和文件夹路径例子(简单实用)
2014/05/10 PHP
PHP连接MSSQL2008/2005数据库(SQLSRV)配置实例
2014/10/22 PHP
PHP htmlspecialchars()函数用法与实例讲解
2019/03/08 PHP
TextArea不支持maxlength的解决办法(jquery)
2011/09/13 Javascript
各种页面定时跳转(倒计时跳转)代码总结
2013/10/24 Javascript
原生javaScript做得动态表格(注释写的很清楚)
2013/12/29 Javascript
javascript实现简单查找与替换的方法
2015/07/22 Javascript
jqGrid 学习笔记整理——进阶篇(一 )
2016/04/17 Javascript
浅谈vue项目可以从哪些方面进行优化
2018/05/05 Javascript
mpvue小程序仿qq左滑置顶删除组件
2018/08/03 Javascript
Element UI 自定义正则表达式验证方法
2018/09/04 Javascript
Vue的路由及路由钩子函数的实现
2019/07/02 Javascript
vue中的v-model原理,与组件自定义v-model详解
2020/08/04 Javascript
vue+swiper实现左右滑动的测试题功能
2020/10/30 Javascript
[01:02:45]完美世界DOTA2联赛 LBZS vs Forest 第三场 11.07
2020/11/09 DOTA
使用Python编写简单网络爬虫抓取视频下载资源
2014/11/04 Python
Python2随机数列生成器简单实例
2017/09/04 Python
python SMTP实现发送带附件电子邮件
2018/05/22 Python
详解python使用turtle库来画一朵花
2019/03/21 Python
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
2019/06/28 Python
pandas的排序和排名的具体使用
2019/07/31 Python
python实现拉普拉斯特征图降维示例
2019/11/25 Python
python selenium操作cookie的实现
2020/03/18 Python
python自动打开浏览器下载zip并提取内容写入excel
2021/01/04 Python
pycharm进入时每次都是insert模式的解决方式
2021/02/05 Python
Melijoe英国官网:法国儿童时尚网站
2016/11/18 全球购物
几道Web/Ajax的面试题
2016/11/05 面试题
十八届三中全会学习方案
2014/02/16 职场文书
2014年单位工作总结范文
2014/11/27 职场文书
小学教师年度个人总结
2015/02/05 职场文书
一个都不能少观后感
2015/06/04 职场文书
亮剑观后感500字
2015/06/05 职场文书
残联2016年全国助残日活动总结
2016/04/01 职场文书
导游词之京东大峡谷旅游区
2019/10/29 职场文书
浅谈CSS不规则边框的生成方案
2021/05/25 HTML / CSS
德劲DE1102数字调谐收音机机评
2022/04/07 无线电