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


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 相关文章推荐
javascript DOM编程实例(智播客学习)
Nov 23 Javascript
js setattribute批量设置css样式
Nov 26 Javascript
利用jQuery接受和处理xml数据的代码(.net)
Mar 28 Javascript
js前台分页显示后端JAVA数据响应
Mar 18 Javascript
Firefox中通过JavaScript复制数据到剪贴板(Copy to Clipboard 跨浏览器版)
Nov 22 Javascript
通过Jquery的Ajax方法读取将table转换为Json
May 31 Javascript
JavaScript截取字符串的2个函数介绍
Aug 27 Javascript
javascript实现类似java中getClass()得到对象类名的方法
Jul 27 Javascript
JS组件系列之使用HTML标签的data属性初始化JS组件
Sep 14 Javascript
JS实现标签滚动切换效果
Dec 25 Javascript
webpack打包react项目的实现方法
Jun 21 Javascript
jquery 通过ajax请求获取后台数据显示在表格上的方法
Aug 08 jQuery
基于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中截取字符串支持utf-8
2007/01/18 PHP
深入Memcache的Session数据的多服务器共享详解
2013/06/13 PHP
解析PHP正则提取或替换img标记属性
2013/06/26 PHP
laravel学习教程之存取器
2016/07/30 PHP
php使用PDO执行SQL语句的方法分析
2017/02/16 PHP
Laravel基础_关于view共享数据的示例讲解
2019/10/14 PHP
Prototype源码浅析 Enumerable部分(二)
2012/01/18 Javascript
如何让浏览器支持jquery ajax load 前进、后退功能
2014/06/12 Javascript
jQuery中insertBefore()方法用法实例
2015/01/08 Javascript
IE下支持文本框和密码框placeholder效果的JQuery插件分享
2015/01/31 Javascript
详解Javascript模板引擎mustache.js
2016/01/20 Javascript
JS获取鼠标选中的文字
2016/08/10 Javascript
Vue单页式应用(Hash模式下)实现微信分享的实例
2017/07/21 Javascript
原生JS实现多个小球碰撞反弹效果示例
2018/01/31 Javascript
bootstrap模态框关闭后清除模态框的数据方法
2018/08/10 Javascript
vue中v-for通过动态绑定class实现触发效果
2018/12/06 Javascript
详解使用React.memo()来优化函数组件的性能
2019/03/19 Javascript
js实现图片跟随鼠标移动效果
2019/10/16 Javascript
[01:16:01]VGJ.S vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
Python基于TCP实现会聊天的小机器人功能示例
2018/04/09 Python
python使用xlrd和xlwt读写Excel文件的实例代码
2018/09/05 Python
Python文件读写常见用法总结
2019/02/22 Python
python顺序执行多个py文件的方法
2019/06/29 Python
基于Python安装pyecharts所遇的问题及解决方法
2019/08/12 Python
财务主管岗位职责
2014/02/28 职场文书
行政人事专员岗位职责
2014/03/05 职场文书
安全生产管理责任书
2014/04/16 职场文书
政工例会汇报材料
2014/08/26 职场文书
2014年审计工作总结
2014/11/17 职场文书
2014幼儿教师个人工作总结
2014/12/03 职场文书
公司档案管理制度
2015/08/05 职场文书
工作后的感想
2015/08/07 职场文书
2016年社区服务活动总结
2016/04/06 职场文书
《卧薪尝胆》读后感3篇
2019/12/26 职场文书
Python爬虫中urllib3与urllib的区别是什么
2021/07/21 Python
mysql中整数数据类型tinyint详解
2021/12/06 MySQL