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 Tab 导航插件 (23个)
Jun 11 Javascript
火狐textarea输入法的bug的触发及解决
Jul 24 Javascript
js判断iframe内的网页是否滚动到底部触发事件
Mar 18 Javascript
通过$(this)使用jQuery包装后的方法或属性
May 18 Javascript
如何调试异步加载页面里包含的js文件
Oct 30 Javascript
js检测判断日期大于多少天的方法
May 04 Javascript
探究JavaScript中的五种事件处理程序方式
Dec 07 Javascript
JS实现搜索框文字可删除功能
Dec 28 Javascript
JavaScript实现前端分页控件
Apr 19 Javascript
Webpack实战加载SVG的方法
Dec 26 Javascript
基于Vue实现的多条件筛选功能的详解(类似京东和淘宝功能)
May 07 Javascript
js实现拖拽元素选择和删除
Aug 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中与数组相关的函数
2007/03/22 PHP
php防止站外远程提交表单的方法
2014/10/20 PHP
php字符串截取函数用法分析
2014/11/25 PHP
php简单实现数组分页的方法
2016/04/30 PHP
smarty中改进truncate使其支持中文的方法
2016/05/30 PHP
yii2实现 &quot;上一篇,下一篇&quot; 功能的代码实例
2017/02/04 PHP
Jquery中LigerUi的弹出编辑框(实现方法)
2013/07/09 Javascript
javascript学习笔记整理(概述、变量、数据类型简介)
2015/10/25 Javascript
javascript实现保留两位小数的多种方法
2015/12/18 Javascript
详解JS中Array对象扩展与String对象扩展
2016/01/07 Javascript
一个字符串中出现次数最多的字符 统计这个次数【实现代码】
2016/04/29 Javascript
JavaScript使用键盘输入控制实现数字验证功能
2016/08/19 Javascript
JS根据生日月份和日期计算星座的简单实现方法
2016/11/24 Javascript
原生js实现无缝轮播图效果
2017/01/11 Javascript
微信小程序 chooseImage选择图片或者拍照
2017/04/07 Javascript
js仿微信公众平台打标签功能
2017/04/08 Javascript
vue全局组件与局部组件使用方法详解
2018/03/29 Javascript
vue中的router-view组件的使用教程
2018/10/23 Javascript
浅谈小程序globalData的那些事儿
2019/11/01 Javascript
小程序使用分包的示例代码
2020/03/23 Javascript
[47:10]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第二场 12.16
2020/12/18 DOTA
开始着手第一个Django项目
2015/07/15 Python
python结合API实现即时天气信息
2016/01/19 Python
深入浅出学习python装饰器
2017/09/29 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
2018/04/21 Python
python地震数据可视化详解
2019/06/18 Python
pytest中文文档之编写断言
2019/09/12 Python
利用keras加载训练好的.H5文件,并实现预测图片
2020/01/24 Python
python实现代码审查自动回复消息
2021/02/01 Python
HTML5 WebSocket实现点对点聊天的示例代码
2018/01/31 HTML / CSS
英国领先的新鲜松露和最好的松露产品供应商:TruffleHunter
2019/08/26 全球购物
班会关于环保演讲稿
2013/12/29 职场文书
初中班主任评语大全
2014/04/24 职场文书
销售简历自我评价怎么写
2014/09/26 职场文书
MySQL CHAR和VARCHAR该如何选择
2021/05/31 MySQL