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 12 Javascript
Javascript非构造函数的继承
Apr 27 Javascript
谈谈AngularJs中的隐藏和显示
Dec 09 Javascript
很实用的js选项卡切换效果
Aug 12 Javascript
使用Ajax生成的Excel文件并下载的实例
Nov 21 Javascript
Webpack的dll功能使用
Jun 28 Javascript
Bootbox将后台JSON数据填充Form表单的实例代码
Sep 10 Javascript
JavaScript禁用右键单击优缺点分析
Jan 20 Javascript
angularjs模态框的使用代码实例
Dec 20 Javascript
JavaScript实现网页留言板功能
Nov 23 Javascript
原生JS封装vue Tab切换效果
Apr 28 Vue.js
5个实用的JavaScript新特性
Jun 16 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 分页类 扩展代码
2009/06/11 PHP
PHP安全技术之 实现php基本安全
2010/09/04 PHP
php ci框架中加载css和js文件失败的原因及解决方法
2014/07/29 PHP
php写入数据到CSV文件的方法
2015/03/14 PHP
php使用Imagick生成图片的方法
2015/07/31 PHP
thinkPHP实现多字段模糊匹配查询的方法
2016/12/01 PHP
PHP 多任务秒级定时器的实现方法
2018/05/13 PHP
javascript 操作Word和Excel的实现代码
2009/10/26 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
2012/01/21 Javascript
js实现鼠标悬停图片上时滚动文字说明的方法
2015/02/17 Javascript
详解Node.js包的工程目录与NPM包管理器的使用
2016/02/16 Javascript
jQuery使用模式窗口实现在主页面和子页面中互相传值的方法
2016/03/01 Javascript
js实现页面a向页面b传参的方法
2016/05/29 Javascript
canvas学习之API整理笔记(一)
2016/12/29 Javascript
jQuery使用ajax方法解析返回的json数据功能示例
2017/01/10 Javascript
JS判断微信扫码的方法
2017/08/07 Javascript
Vue 与 Vuex 的第一次接触遇到的坑
2018/08/16 Javascript
微信小程序onLaunch异步,首页onLoad先执行?
2018/09/20 Javascript
浅析JS中NEW的实现原理及重写
2020/02/20 Javascript
python使用Queue在多个子进程间交换数据的方法
2015/04/18 Python
python列出目录下指定文件与子目录的方法
2015/07/03 Python
剖析Python的Tornado框架中session支持的实现代码
2015/08/21 Python
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
2017/06/27 Python
python使用jieba实现中文分词去停用词方法示例
2018/03/11 Python
python求最大值,不使用内置函数的实现方法
2019/07/09 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
2020/02/12 Python
Python使用type动态创建类操作示例
2020/02/29 Python
TensorFLow 数学运算的示例代码
2020/04/21 Python
Python  word实现读取及导出代码解析
2020/07/09 Python
HTML5标签嵌套规则详解【必看】
2016/04/26 HTML / CSS
学习之星事迹材料
2014/05/17 职场文书
银行求职信怎么写
2014/05/26 职场文书
竞聘报告优秀范文
2014/11/06 职场文书
何玥事迹观后感
2015/06/16 职场文书
观看禁毒宣传片后的感想
2015/08/11 职场文书
SpringBoot中使用Redis作为全局锁示例过程
2022/03/24 Java/Android