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 相关文章推荐
jQuery 入门级学习笔记及源码
Jan 22 Javascript
javascript下判断一个元素是否存在的代码
Mar 05 Javascript
JavaScript.The.Good.Parts阅读笔记(一)假值与===运算符
Nov 16 Javascript
解决Jquery向页面append新元素之后事件的绑定问题
Mar 16 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
Aug 15 Javascript
一种Javascript解释ajax返回的json的好方法(推荐)
Jun 02 Javascript
Bootstrap 布局组件(全)
Jul 18 Javascript
jQuery利用sort对DOM元素进行排序操作
Nov 07 Javascript
微信小程序使用wx.request请求服务器json数据并渲染到页面操作示例
Mar 30 Javascript
Javascript通过控制类名更改样式
May 24 Javascript
vue 实现强制类型转换 数字类型转为字符串
Nov 07 Javascript
使用webpack搭建vue环境的教程详解
Dec 31 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+mysql 实现身份验证代码
2010/03/24 PHP
深入PHP变量存储的详解
2013/06/13 PHP
PHP实现对文本数据库的常用操作方法实例演示
2014/07/04 PHP
PHP 错误处理机制
2015/07/06 PHP
thinkphp实现分页显示功能
2016/12/03 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
PHP实现文件上传操作和封装
2020/03/04 PHP
根据地区不同显示时间的javascript代码
2007/08/13 Javascript
Javascript控制input输入时间格式的方法
2015/01/28 Javascript
jQuery EasyUI datagrid实现本地分页的方法
2015/02/13 Javascript
js实现仿阿里巴巴城市选择框效果实例
2015/06/24 Javascript
JS 日期与时间戮相互转化的简单实例
2016/06/22 Javascript
对称加密与非对称加密优缺点详解
2017/02/06 Javascript
vue深入解析之render function code详解
2017/07/18 Javascript
AngularJS实现的输入框字数限制提醒功能示例
2017/10/26 Javascript
深入理解ES6之数据解构的用法
2018/01/13 Javascript
微信小程序实现的自定义分享功能示例
2019/02/12 Javascript
vue 解决computed修改data数据的问题
2019/11/06 Javascript
vue视频播放暂停代码
2019/11/08 Javascript
详细分析vue表单数据的绑定
2020/07/20 Javascript
JSON stringify方法原理及实例解析
2020/10/23 Javascript
使用beaker让Facebook的Bottle框架支持session功能
2015/04/23 Python
Python实现多级目录压缩与解压文件的方法
2018/09/01 Python
python实现图书借阅系统
2019/02/20 Python
Python学习笔记之Django创建第一个数据库模型的方法
2019/08/07 Python
Python使用微信itchat接口实现查看自己微信的信息功能详解
2019/08/22 Python
python3 BeautifulSoup模块使用字典的方法抓取a标签内的数据示例
2019/11/28 Python
python读取csv文件指定行的2种方法详解
2020/02/13 Python
大学校庆邀请函
2014/01/11 职场文书
网络营销策划方案
2014/06/04 职场文书
不服劳动仲裁起诉书
2015/05/20 职场文书
2015年酒店年度工作总结
2015/05/23 职场文书
高中运动会前导词
2015/07/20 职场文书
总经理聘用协议书
2015/09/21 职场文书
学校标语口号大全
2015/12/26 职场文书
Python带你从浅入深探究Tuple(基础篇)
2021/05/15 Python