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获取ckeditor编辑器的值(实现代码)
Nov 18 Javascript
Jquery实现兼容各大浏览器的Enter回车切换输入焦点的方法
Sep 01 Javascript
基于javascript实现漂亮的页面过渡动画效果附源码下载
Oct 26 Javascript
结合代码图文讲解JavaScript中的作用域与作用域链
Jul 05 Javascript
jQuery之简单的表单验证实例
Jul 07 Javascript
ionic2 tabs 图标自定义实例
Mar 08 Javascript
ES6新特性六:promise对象实例详解
Apr 21 Javascript
利用forever和pm2部署node.js项目过程
May 10 Javascript
无限循环轮播图之运动框架(原生JS实现)
Oct 01 Javascript
详解Angular Karma测试的持续集成实践
Nov 15 Javascript
js实现详情页放大镜效果
Oct 28 Javascript
Vue项目打包部署到apache服务器的方法步骤
Feb 01 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
星际争霸兵种名称对照表
2020/03/04 星际争霸
新手学PHP之数据库操作详解及乱码解决!
2007/01/02 PHP
PHP快速排序算法实现的原理及代码详解
2019/04/03 PHP
浅析PHP 中move_uploaded_file 上传中文文件名失败
2019/04/17 PHP
线路分流自动跳转代码;希望对大家有用!
2006/12/02 Javascript
jQuery 使用手册(五)
2009/09/23 Javascript
jquery 表单取值常用代码
2009/12/22 Javascript
javascript中window.event事件用法详解
2012/12/11 Javascript
JS复制到剪贴板示例代码
2013/10/30 Javascript
加载列表时jquery获取ul中第一个li的属性
2014/11/02 Javascript
JS仿iGoogle自定义首页模块拖拽特效的方法
2015/02/13 Javascript
JS使用eval解析JSON的注意事项分析
2015/11/14 Javascript
AngularJS入门教程之AngularJS指令
2016/04/18 Javascript
基于AGS JS开发自定义贴图图层
2017/03/31 Javascript
学习使用Bootstrap输入框、导航、分页等常用组件
2017/05/11 Javascript
安装Node.js并启动本地服务的操作教程
2018/05/12 Javascript
antd Upload 文件上传的示例代码
2018/12/14 Javascript
Vue.js组件高级特性实例详解
2018/12/24 Javascript
numpy排序与集合运算用法示例
2017/12/15 Python
Python元字符的用法实例解析
2018/01/17 Python
Python序列化pickle模块使用详解
2020/03/05 Python
如何用Anaconda搭建虚拟环境并创建Django项目
2020/08/02 Python
python实现一个简单RPC框架的示例
2020/10/28 Python
HTML5的结构和语义(2):结构
2008/10/17 HTML / CSS
html5中为audio标签增加停止按钮动作实现方法
2013/01/04 HTML / CSS
宝拉珍选英国官网:Paula’s Choice英国
2019/05/29 全球购物
飞利信loadrunner和软件测试笔试题
2012/09/22 面试题
EJB3推出JPA的原因
2013/10/16 面试题
奖学金自我鉴定范文
2013/10/03 职场文书
《罗布泊,消逝的仙湖》教学反思
2014/03/01 职场文书
新春联欢会主持词
2014/03/24 职场文书
村长贪污检举信
2014/04/04 职场文书
小班上学期个人总结
2015/02/12 职场文书
初婚初育证明范本
2015/06/18 职场文书
学生会主席任命书
2015/09/21 职场文书
HTML中的表单Form实现居中效果
2021/05/25 HTML / CSS