微信小程序拖拽排序列表的示例代码


Posted in Javascript onJuly 08, 2020

拖拽排序列表

微信小程序拖拽排序列表的示例代码

思路

界面分为两层:

  • 底层,正常列表展示,拖拽的时候不做处理(大牛直接加了动画,原谅我技艺不精,还没实现)
  • 顶层,movable-view组件,不长按不展示,之后长按才展示,且没有点击事件。

事件

主要监听:longpress , touchmove , touchend 三个事件

longpress

保障长按才有效,并设定许多其他值。

touchmove

滑动的时候触发

  • 判断是否需要滑动页面,因为 movable-area组件 滑动事件被catch掉,无法滑动;
  • 记录滑动经过的项,在页面【底层】设置经过项为其他样式(算是补足没有滑动动画的缺陷吧,不需要可以删除 lastTarget字段)。

touchend

滑动结束时触发

获取目标节点索引,将初始拖拽节点移动至目标节点,其中的关键代码为:

list.splice(futureIndex, 0, list.splice(dragElementIndex, 1)[0]); // 移动位置

(这行代码参考了Vue.Draggable中一行代码)

将其他设置置空

代码

代码片段

码云仓库 欢迎star、提问题。鞋鞋

示例

// 初始点击
  stratBtn(e){
    let index = http.dataIndex(e)[0];//获取当前点击的列表
    let busArr = this.data.busArr;//获取列表中的所有数组
    let pageY = Number(e.touches[0].pageY);//初始点击的Y点坐标
    let busActObj = busArr[index];//单独记录当前点击的数据
    this.setData({ //保存数据
      sPageY:pageY,
      mPageY:pageY,
      moveSortBox:true,
      clickIndex:index,
      busActObj:busActObj
    })
  },
  // 开始移动
  moveBtn(e){
    let pageY = Number(e.touches[0].pageY); //记录移动点的坐标
    this.setData({ //记录
      mPageY:pageY,
      moveSortBox:true,
    })
  },
  // 结束点击
  endBtn(e){
    let sPageY = Number(this.data.sPageY); //获取初始点的坐标
    let busArr = this.data.busArr; //获取数组
    let pageY = Number(e.changedTouches[0].pageY);//获取结束点的坐标
    let clickIndex = Number(this.data.clickIndex); //初始点的位置
    let busActObj = this.data.busActObj;//获取初始点的列表单独数据
    let position = parseInt((pageY-sPageY)/90)+(clickIndex+1); //每个盒子固定高度90px (结束点-初始点/盒子高度)+(初始点的位置+1)可以得到移动的位置
    busArr.splice(clickIndex,1);//删除初始数据
    busArr.splice(position,0,busActObj);//在移动点重新插入数据
    this.setData({//保存
      moveSortBox:false,
      busArr:busArr
    })
  },

参考链接

[1] SortableJS Vue.Draggable

[2] SortableJS Sortable

[3] SortableJS演示示例 Vue.Draggable

[4] 好想再胖十斤 25行代码解决小程序的拖拽排序

到此这篇关于微信小程序拖拽排序列表的示例代码的文章就介绍到这了,更多相关微信小程序拖拽排序列表内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
简单的JS多重继承示例
Mar 13 Javascript
javascript 动态设置已知select的option的value值的代码
Dec 16 Javascript
用js来解决ajax读取页面乱码
Nov 28 Javascript
jquery动态改变onclick属性导致失效的问题解决方法
Dec 04 Javascript
基于jQuery的Web上传插件Uploadify使用示例
May 19 Javascript
使用ajaxfileupload.js实现上传文件功能
Aug 13 Javascript
谈谈对JavaScript原生拖放的深入理解
Sep 20 Javascript
javascript 分号总结及详细介绍
Sep 24 Javascript
js获取浏览器和屏幕的各种宽度高度
Feb 22 Javascript
JavaScript中运算符规则和隐式类型转换示例详解
Sep 06 Javascript
vue-week-picker实现支持按周切换的日历
Jun 26 Javascript
vue使用require.context实现动态注册路由
Dec 25 Vue.js
基于javascript canvas实现五子棋游戏
Jul 08 #Javascript
深度解读vue-resize的具体用法
Jul 08 #Javascript
详解React 条件渲染
Jul 08 #Javascript
webpack5 联邦模块介绍详解
Jul 08 #Javascript
实例讲解React 组件
Jul 07 #Javascript
JavaScript eval()函数定义及使用方法详解
Jul 07 #Javascript
详解React 元素渲染
Jul 07 #Javascript
You might like
PHP 身份验证方面的函数
2009/10/11 PHP
php一个找二层目录的小东东
2012/08/02 PHP
那些年我们错过的魔术方法(Magic Methods)
2014/01/14 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
2016/11/12 PHP
让您的菜单不离网站
2006/10/03 Javascript
json2.js的初步学习与了解
2011/10/06 Javascript
JavaScript Array Flatten 与递归使用介绍
2011/10/30 Javascript
通过length属性判断jquery对象是否存在
2013/10/18 Javascript
js格式化时间小结
2014/11/03 Javascript
js中substr,substring,indexOf,lastIndexOf,split,replace的用法详解
2015/11/09 Javascript
jQuery实现的简单拖拽功能示例
2016/09/13 Javascript
原生JS实现简单放大镜效果
2017/02/08 Javascript
Angular2监听页面大小变化的解决方法
2017/10/09 Javascript
详解在React中跨组件分发状态的三种方法
2018/08/09 Javascript
vue 中基于html5 drag drap的拖放效果案例分析
2018/11/01 Javascript
Nodejs处理异常操作示例
2018/12/25 NodeJs
[01:04:22]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 IG vs EG
2018/04/01 DOTA
Python使用sort和class实现的多级排序功能示例
2018/08/15 Python
解决python3.5 正常安装 却不能直接使用Tkinter包的问题
2019/02/22 Python
Python3.5装饰器典型案例分析
2019/04/30 Python
在PYQT5中QscrollArea(滚动条)的使用方法
2019/06/14 Python
django的model操作汇整详解
2019/07/26 Python
如何利用Python开发一个简单的猜数字游戏
2019/09/22 Python
python使用ctypes调用扩展模块的实例方法
2020/01/28 Python
如何导出python安装的所有模块名称和版本号到文件中
2020/06/05 Python
python 进程池pool使用详解
2020/10/15 Python
html5使用canvas画三角形
2014/12/15 HTML / CSS
台湾乐天市场:日本No.1的网路购物网站
2017/03/22 全球购物
Giglio俄罗斯奢侈品购物网:男士、女士、儿童高级时装
2018/07/27 全球购物
澳大利亚墨尔本的在线时装店:LORETA
2018/09/14 全球购物
网上常见的一份Linux面试题(多项选择部分)
2015/02/07 面试题
建筑安全员岗位职责
2014/03/13 职场文书
考试作弊检讨书1000字(5篇)
2014/10/19 职场文书
中班下学期个人总结
2015/02/12 职场文书
项目合作意向书
2015/05/08 职场文书
百年校庆宣传标语口号
2015/12/26 职场文书