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 相关文章推荐
解决FLASH需要点击激活的代码
Dec 20 Javascript
写出高效jquery代码的19条指南
Mar 19 Javascript
js实现延迟加载的方法
Jun 24 Javascript
JS实现可直接显示网页代码运行效果的HTML代码预览功能实例
Aug 06 Javascript
JS在onclientclick里如何控制onclick的执行
May 30 Javascript
Vue.js每天必学之指令系统与自定义指令
Sep 07 Javascript
JS封装的选项卡TAB切换效果示例
Sep 20 Javascript
bootstrap table配置参数例子
Jan 05 Javascript
Angular17之Angular自定义指令详解
Jan 21 Javascript
JS实现二维数组横纵列转置的方法
Apr 17 Javascript
React之PureComponent的使用作用
Jul 10 Javascript
vue-cli2打包前和打包后的css前缀不一致的问题解决
Aug 24 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 Static 关键字之旅模式
2015/11/13 PHP
php 判断页面或图片是否经过gzip压缩的方法
2017/04/05 PHP
JavaScript 验证浏览器是否支持javascript的方法小结
2009/05/17 Javascript
用Greasemonkey 脚本收藏网站会员信息到本地
2009/10/26 Javascript
说说JSON和JSONP 也许你会豁然开朗
2012/09/02 Javascript
推荐40款强大的 jQuery 导航插件和教程(上篇)
2012/09/14 Javascript
Javascript 颜色渐变效果的实现代码
2013/10/01 Javascript
JS获取当前日期时间并定时刷新示例
2021/03/04 Javascript
JavaScript实现简单图片翻转的方法
2015/04/17 Javascript
JS清除字符串中重复值的实现方法
2016/08/03 Javascript
js获取元素的标签名实现方法
2016/10/08 Javascript
AngularJS执行流程详解
2017/02/17 Javascript
基于JavaScript实现的顺序查找算法示例
2017/04/14 Javascript
Vue.js结合Ueditor富文本编辑器的实例代码
2017/07/11 Javascript
vue如何集成raphael.js中国地图的方法示例
2017/08/15 Javascript
JavaScript中重名的函数与对象示例详析
2017/09/28 Javascript
vue 挂载路由到头部导航的方法
2017/11/13 Javascript
详解Angular操作cookies方法
2018/06/01 Javascript
浅谈vue同一页面中拥有两个表单时,的验证问题
2018/09/18 Javascript
使用layer弹窗提交表单时判断表单是否输入为空的例子
2019/09/26 Javascript
python dict.get()和dict['key']的区别详解
2016/06/30 Python
Python实现屏幕截图的代码及函数详解
2016/10/01 Python
python爬虫的数据库连接问题【推荐】
2018/06/25 Python
Python安装selenium包详细过程
2019/07/23 Python
python利用openpyxl拆分多个工作表的工作簿的方法
2019/09/27 Python
Django关于admin的使用技巧和知识点
2020/02/10 Python
使用Python获取当前工作目录和执行命令的位置
2020/03/09 Python
浅谈numpy中np.array()与np.asarray的区别以及.tolist
2020/06/03 Python
keras 解决加载lstm+crf模型出错的问题
2020/06/10 Python
缅甸网上购物:Shop.com.mm
2017/12/05 全球购物
车间班长岗位职责
2013/11/30 职场文书
教师党性分析材料
2014/02/04 职场文书
人力资源主管的岗位职责
2014/03/15 职场文书
发展党员工作情况汇报
2014/10/28 职场文书
Python连续赋值需要注意的一些问题
2021/06/03 Python
java基础——多线程
2021/07/03 Java/Android