微信小程序 -- 基于 movable-view 实现拖拽排序
微信小程序 -- 基于 movable-view 实现拖拽排序
项目基于
colorui样式组件 ColorUI组件库 (color-ui.com)
1.实现效果

2. 设计思路
- movable-view 绑定块移动事件的 块
ID,块移动的坐标 - 移动结束后触发
moveEnd事件,根据Y坐标对对象数组进行排序 - 根据排序结果重置块位置
3.实现代码
代码已经进行了最简化处理
图中效果实现需引入colorui的main.wxss样式部分。
wxml
<movable-area class="padding text-center bg-grey" style="width:100%;height:500px;" >
<movable-view class="radius shadow bg-white" style="width:80%;height:80px;z-index:{{index==moveId?2:1}}" wx:for="{{tabList}}" wx:key="index" x="{{item.x}}" y="{{item.y}}" direction="all"
bindchange="moveStatus" bindtouchend='moveEnd' data-moveid="{{index}}">
{{item.name}}</movable-view>
</movable-area>
js
var compare = function (obj1, obj2) {
var val1 = obj1.y;
var val2 = obj2.y;
if (val1 < val2) {
return -1;
} else if (val1 >= val2) {
return 1;
} else {
return 0;
}
}
Page({
/**
* 页面的初始数据
*/
data: {
branchid:'',
appdocid:'',
tabList:[
{
name:'十步杀一人'
},
{
name:'千里不留行'
},
{
name:'事了拂衣去'
},
{
name:'深藏身与名'
}
],
//移动的是哪个元素块
moveId:null,
//最终停止的位置
endX:0,
endY:0
},
initMove(){
let tabList = this.data.tabList;
var tarr = []
tabList.forEach(function(ele,index){
let obj = ele
obj.id = index
obj.x = 30
obj.y = 100*index +20
tarr.push(obj)
})
console.log(tarr)
this.setData({
tabList:tarr
})
},
moveEnd(e){
console.log(e)
var that = this;
that.setData({
["tabList["+that.data.moveId+"].x"]:that.data.endX,
["tabList["+that.data.moveId+"].y"]:that.data.endY
},()=>{
let tabList = this.data.tabList;
tabList = tabList.sort(compare);
that.setData({
tabList
},()=>{
setTimeout(function(){
that.initMove();
},500)
})
})
//计算位置
},
moveStatus(e){
// console.log(e)
//移动的块ID
var moveid = e.currentTarget.dataset.moveid;
//最终坐标
let x = e.detail.x
let y = e.detail.y
this.setData({
moveId:moveid,
endX:x,
endY:y
})
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
this.initMove();
}
})
4.参考文档
微信小程序 -- 基于 movable-view 实现拖拽排序的更多相关文章
- 微信小程序~触摸相关事件(拖拽操作、手势识别、多点触控)
touchstart 手指触摸动作开始 touchmove 手指触摸后移动 touchcancel 手指触摸动作被打断,如来电提醒,弹窗 touchend 手指触摸动作结束 ...
- 微信小程序-基于canvas画画涂鸦
代码地址如下:http://www.demodashi.com/demo/14461.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...
- 微信小程序基于swiper组件的tab切换
代码地址如下:http://www.demodashi.com/demo/14010.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...
- 微信小程序基于scroll-view实现锚点定位
代码地址如下:http://www.demodashi.com/demo/14009.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...
- 微信小程序-基于高德地图API实现天气组件(动态效果)
微信小程序-基于高德地图API实现天气组件(动态效果) 在社区翻腾了许久,没有找到合适的天气插件.迫不得已,只好借鉴互联网上的web项目,手动迁移到小程序中使用.现在分享到互联网社区中,帮助后续有 ...
- 微信小程序--基于ColorUI构建皮皮虾短视频去水印组件(仅供学习使用)
微信小程序--基于ColorUI构建皮皮虾短视频去水印组件(仅供学习使用) 没错,我是皮友,我想学习舞蹈(/doge)和瑜伽 ,要无水印的那种有助于我加深学习. 1.组件效果展示 2.组件引入准备 h ...
- 微信小程序_(组件)view视图容器
微信小程序view组件官方文档 传送门 Learn 一.hover-class属性 二.hover-start-time与hover-stay-time属性 三.hover-stop-propagat ...
- 微信小程序基于腾讯云对象存储的图片上传
在使用腾讯云对象存储之前,公司一直使用的是传统的FTP的上传模式,而随着用户量的不断增加,FTP所暴露出来的问题也越来越多,1.传输效率低,上传速度慢.2.时常有上传其他文件来攻击服务器,安全上得不到 ...
- 微信小程序基于第三方websocket的服务器端部署
微信小程序后台请求越来越严格 1.request要求用https 2.websocket要求用wss 3.测试后发现websocket只能走433端口 作为.net开发,websocket又是使用的第 ...
随机推荐
- postman使用教程7-参数化引用外部文件测试数据
前言 当同一个接口需要测试不同的参数时,需用到参数化的概念.postman支持从外部文件读取测试数据参数化 设置参数化变量 新建一个collections 专门测试登录接口 设置集合变量usernam ...
- 【译】N 皇后问题 – 构造法原理与证明 时间复杂度O(1)
[原] E.J.Hoffman; J.C.Loessi; R.C.Moore The Johns Hopkins University Applied Physics Laboratory *[译]* ...
- 将一个eclipse的SSM项目用IDEA打开并运行
项目部署 将一个eclipse项目用idea打开,并且 部署到tomcat中 .或者你tomcat部署成功,但是启动就是404,下面的步骤就要更认真看了 项目配置 打开idea,Import Proj ...
- 修改wordpress版权信息
修改页脚版权信息位置:找到C:\wamp64\www\wordpress\wp-content\themes\travelify\library\structure\footer-extensions ...
- Scrum Meeting 0
Basic Info where:五号教学楼 when:2020/4/21 target: 明确每次会议基本流程 简要汇报一下已完成任务,下一步计划与遇到的问题 Progress Team Membe ...
- CVE-2020-1350 详解与复现
# 漏洞简介 在Windows上,DNS服务器是域控制器,其管理员是Domain Admins组的一部分.默认情况下,Domain Admins组是已加入域的所有计算机上Administrators组 ...
- 把el-element的日期格式改为CRON
在日常的开发当中,经常会遇到格式的不匹配造成的困扰. 在日期管理上,el-element也是贴心的准备了相关的日期选择器,但是在取值的时候发现,el-element所给出的值格式可能并不是我们常用的. ...
- [Qt] 《开发指南》samp4.1 源码分析
界面: 功能: 输入单价和数量,计算总价:进制转换 控件: Qlabel QLineEdit QPushButton 文件依赖关系图(depend on): main.cpp:程序入口 widget. ...
- Installing SFTP/SSH Server on Windows using OpenSSH
Installing SFTP/SSH Server 1. On Windows 10 version 1803 and newer In Settings app, go to Apps > ...
- Redis 哨兵模式配置
搭建步骤 第一步: 在 redis.conf 配置文件目录下拷贝三份 sentinel.conf 文件 [root@node-01 redis-5.0.9]# cp sentinel.conf sen ...