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 相关文章推荐
&amp;lt;script defer&amp;gt; defer 是什么意思
May 10 Javascript
JQuery 传送中文乱码问题的简单解决办法
May 24 Javascript
JavaScript 计算笛卡尔积实例详解
Dec 02 Javascript
vue.js实现用户评论、登录、注册、及修改信息功能
May 30 Javascript
浅谈 Vue 项目优化的方法
Dec 16 Javascript
纯JS实现出生日期[年月日]下拉菜单效果
Jun 01 Javascript
angular的输入和输出的使用方法
Sep 22 Javascript
vueScroll实现移动端下拉刷新、上拉加载
Mar 22 Javascript
小程序实现短信登录倒计时
Jul 12 Javascript
JS/jQuery实现超简单的Table表格添加,删除行功能示例
Jul 31 jQuery
搭建vscode+vue环境的详细教程
Aug 31 Javascript
Vue用mixin合并重复代码的实现
Nov 27 Vue.js
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地址引用(php地址引用的效率问题)
2012/03/23 PHP
PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别
2014/09/29 PHP
推荐几款用 Sublime Text 开发 Laravel 所用到的插件
2014/10/30 PHP
laravel实现前后台路由分离的方法
2019/10/13 PHP
js 文件引入实现代码
2010/04/23 Javascript
html中的input标签的checked属性jquery判断代码
2012/09/19 Javascript
得到jQuery detach()后节点中的某个值实现代码
2013/02/05 Javascript
Javascript实现重力弹跳拖拽运动效果示例
2013/06/28 Javascript
JavaScript遍历table表格中的某行某列并打印其值
2014/07/08 Javascript
jquery实现像栅栏一样左右滑出式二级菜单效果代码
2015/08/24 Javascript
jQuery实现鼠标经过时出现隐藏层文字链接的方法
2015/10/12 Javascript
学习javascript面向对象 理解javascript对象
2016/01/04 Javascript
Javascript对象字面量的理解
2016/06/22 Javascript
js重写方法的简单实现
2016/07/10 Javascript
使用BootStrap实现悬浮窗口的效果
2016/12/13 Javascript
JavaScript实现求最大公共子串的方法
2018/02/03 Javascript
在angular 6中使用 less 的实例代码
2018/05/13 Javascript
vue脚手架搭建过程图解
2018/06/06 Javascript
浅谈Vue路由快照实现思路及其问题
2018/06/07 Javascript
vue-router中的hash和history两种模式的区别
2018/07/17 Javascript
详解微信小程序的 request 封装示例
2018/08/21 Javascript
实现一个Vue自定义指令懒加载的方法示例
2020/06/04 Javascript
[49:20]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
pygame播放音乐的方法
2015/05/19 Python
Python解析命令行读取参数--argparse模块使用方法
2018/01/23 Python
Python实现的对本地host127.0.0.1主机进行扫描端口功能示例
2019/02/15 Python
Python+OpenCV采集本地摄像头的视频
2019/04/25 Python
使用Python实现将list中的每一项的首字母大写
2019/06/11 Python
英国广泛的照明产品网站:Lights4living
2018/01/28 全球购物
SQL Server面试题
2016/10/17 面试题
JVM是一个编译程序还是解释程序
2012/09/11 面试题
餐饮业的创业计划书范文
2013/12/26 职场文书
房地产资料员岗位职责
2014/07/02 职场文书
2016年大学迎新晚会工作总结
2015/10/15 职场文书
MySQL实现配置主从复制项目实践
2022/03/31 MySQL
一次Mysql update sql不当引起的生产故障记录
2022/04/01 MySQL