微信小程序通过 movable-area 做一个与vuedraggable相似的上下拖动排序控件

因为只是做个小案例 我就直接代码写page页面里了 其实很简单 组件稍微改一下就好了
wxss


/* 设置movable-area的宽度 */
.area{width: 100%;
}/* a b c 每条元素的样式 */
movable-view {width: 100%;background-color: red;height: 40px;line-height: 40px;color: #FFFFFF;text-align: center;
}

都是些基本样式 也没什么好讲的 但是 这里我js中用了很多px的计算代码 大家最好还是看清楚再改 不然 rpx和px对不上问题还是很大的

js代码

Page({data: {//排序元素集合list: [{ text: 'a', id: 0, top: 0 },{ text: 'b', id: 1, top: 0 },{ text: 'c', id: 2, top: 0 }],//整个元素的高度totalHeight: 0,//控制协助movable-area 元素重新渲染reload: true},onLoad: function () {//调用初始化函数this.initialization();},//将指定元素 在数组中后移一个下标moveElementBackward(arr, index) {if((index + 1) === arr.length) {return arr}const element = arr[index];arr.splice(index, 1);arr.splice(index + 1, 0, element);return arr;},//将指定元素 在数组中前移一个下标moveIndexForward(arr, index) {if(index == 0){return arr}// 创建一个空数组 存储更改后的结构var newArr = Array.from(arr);// 获取要前移的两个下标的值var value1 = newArr[index];var value2 = newArr[index - 1];// 交换两个元素的位置newArr[index] = value2;newArr[index - 1] = value1;return newArr;},initialization() {let list = this.data.listif(!list.length) {return}list = list.map((item,index) => {item.top = (index*50)return item})this.setData({list: list,totalHeight: list.length*50,reload: true})},handleTouchEnd() {//先将reload 改为false 让movable-area wxif不生效 强制移除this.setData({reload: false})//等待想试试数据生效修改后 调用初始化函数wx.nextTick(() => {this.initialization();})},//当用户拖动某块元素时触发handleTouchMove: function (event) {//获取到当前用拖动的是第几个元素const index = event.currentTarget.dataset.index//获取到 y 轴  就是 上下拖动的距离const currentY = event.touches[0].clientY//定义一个list 接受tata中的listconst list = this.data.list// 通过index 从list 集合中找到当前元素 对比 top和拖动的高度if(currentY > (list[index].top+70)) {// 如果比起之前  乡下了  70还要多 直接 调用 向后移动一个下标的函数const newArray = this.moveElementBackward(list, index);//调用setData 修改函数 修改 data中的 list 换成我们新处理好的函数this.setData({list: newArray})//等待  响应式数据修改并生效后再执行的nextTickwx.nextTick(() => {//调用初始化函数this.initialization();})}else if(currentY < (list[index].top-20)) {const newArray = this.moveIndexForward(list, index);this.setData({list: newArray})//等待  响应式数据修改并生效后再执行的nextTickwx.nextTick(() => {//调用初始化函数this.initialization();})}}
});

我的注释还是写的非常认真的 大家可以好好读一读
然后 wxml 没什么特别的 就是渲染一下list

<movable-areaclass = "area"style = "height: {{totalHeight}}px;"wx:if="{{ reload }}"
><movable-viewwx:for="{{list}}"wx:key="id"data-index="{{index}}"y="{{item.top}}"direction="all"bindtouchmove="handleTouchMove"bindtouchend="handleTouchEnd">{{item.text}}</movable-view>
</movable-area>

在这里插入图片描述
这样 我们就做了一个 可以上下拖动元素排序的小案例了
在这里插入图片描述
效果也是非常不错的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/101251.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker命令,免sudo

docker命令&#xff0c;免sudo 一、创建docker用户组 # 查看有无用户组 cat /etc/group | grep docker # 若无&#xff0c;创建 sudo groupadd docker二、添加当前用户到用户组 sudo gpasswd -a ${USER} docker三、重启docker服务 sudo service docker restart四、重启会话…

day

#include <iostream> using namespace std; class Per {//算术运算符friend const Per operator(const Per &k1,const Per &k2);friend const Per operator-(const Per &k1,const Per &k2);friend const Per operator*(const Per &k1,const Per &…

3ds Max渲染太慢?创意云“一键云渲染”提升3ds Max渲染体验

&#xfeff;在数字艺术设计领域&#xff0c;3ds Max是广泛使用的三维建模和渲染软件之一。然而&#xff0c;许多用户都面临着一个共同的问题&#xff1a;渲染速度太慢。渲染一帧画面需要耗费数小时&#xff0c;让人无法忍受。除了之前给大家介绍的几种解决方法外&#xff1a; …

uvm中transaction的response和id的解读

在公司写代码的时候发现前辈有一段这样的代码&#xff1a; ....//其他transaction uvm_create(trans);........ uvm_send(trans); tmp_id trans.get_transaction_id(); get_response(rsp,tmp_id); 如果前面有其他transaction&#xff0c;这段代码里的get_response不带id的话…

C#学习系列相关之多线程(五)----线程池ThreadPool用法

一、线程池的作用 线程池是一种多线程处理形式&#xff0c;处理过程中将任务添加到队列&#xff0c;然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认堆栈大小&#xff0c;以默认的优先级运行&#xff0c;并处于多线程单元中。如果某个线程在托管…

Vue3中reactive, onMounted, ref,toRaw,conmpted 使用方法

import { reactive, onMounted, ref,toRaw,conmpted } from vue; vue3中 reactive &#xff0c;ref &#xff0c; toRaw&#xff0c;watch&#xff0c;conmpted 用法 toRaw 返回原响应式对象 用法&#xff1a; const rowList toRaw(row) reactive:ref: ref和reactive都是V…

快讯|Tubi 有 Rabbit AI 啦

在每月一期的 Tubi 快讯中&#xff0c;你将全面及时地获取 Tubi 最新发展动态&#xff0c;欢迎星标关注【比图科技】微信公众号&#xff0c;一起成长变强&#xff01; Tubi 推出 Rabbit AI 帮助用户找到喜欢的视频内容 Tubi 于今年九月底推出了 Rabbit AI&#xff0c;这是一项…

有效回收组分含量

声明 本文是学习GB-T 42944-2023 纸、纸板和纸制品 有效回收组分的测定. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件描述了纸、纸板和纸制品中有效回收组分的测定方法。 本文件适用于各种纸、纸板和纸制品&#xff0c;也适用于铝箔…

AndroidStudio报错:Plugin with id ‘kotlin-android‘ not found.

第一步 要在自己的项目的build.gradle的buildscript中添加ext.kotlin_version 1.3.72 第二步 然后在dependencies里添加classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 大体如下&#xff1a; buildscript {ext.kotlin_version 1.3.72r…

Qt如何在视频画面上新增车道线显示

在Qt中向视频画面上新增车道线显示通常需要以下步骤&#xff1a; 1.获取视频流或帧数据&#xff1a;首先&#xff0c;您需要获取视频流或视频帧的数据。您可以使用Qt的多媒体模块或其他第三方库来捕获视频流&#xff0c;或者从视频文件中读取帧数据。这将是您要在其上绘制车道…

【自动驾驶】PETR/PETRv2/StreamPETR论文分析

1.PETR PETR网络结构如下&#xff0c;主要包括image-backbone, 3D Coordinates Generator, 3D Position Encoder, transformer Decoder 1.1 Images Backbone 采用resnet 或者 vovNet,下面的x表示concatenate 1.2 3D Coordinates Generator 坐标生成跟lss类似&#xff0c;假…

如何对比github中不同commits的区别

有时候想要对比跨度几十个commits之前的代码区别&#xff0c;想直接使用github的用户界面。可以直接在官网操作。 示例 首先要创建一个旧commit的branch。进入该旧的commit&#xff0c;然后输入branch名字即可。 然后在项目网址后面加上compare即可对比旧的branch和新的bran…

【轻松玩转MacOS】故障排除篇

引言 在使用 MacOS 时&#xff0c;遇到故障是在所难免的。不要担心&#xff0c;这篇文章将为您提供一些常见的故障排除步骤&#xff0c;并介绍如何联系苹果的支持团队寻求帮助。让我们一起来看看吧&#xff01; 一、常见的故障排除步骤 1.1 网络连接问题 如果你发现你的Mac…

初识华为云数据库GaussDB for openGauss

01 前言 GaussDB是华为自主创新研发的分布式关系型数据库。该产品具备企业级复杂事务混合负载能力&#xff0c;同时支持分布式事务&#xff0c;同城跨AZ部署&#xff0c;数据0丢失&#xff0c;支持1000的扩展能力&#xff0c;PB级海量存储。同时拥有云上高可用&#xff0c;高可…

【postgresql】ERROR: integer out of range

查询文章都类似&#xff0c;只是类型没有对应上&#xff0c;根据实际情况处理。 前情 使用postgresql数据库数据库ID类型int4实体类代码private Long id; 异常 ### Cause: org.postgresql.util.PSQLException: ERROR: integer out of range ; ERROR: integer out of range;…

Go 语言切片扩容规则是扩容2倍?1.25倍?到底几倍

本次主要来聊聊关于切片的扩容是如何扩的&#xff0c;还请大佬们不吝赐教 切片&#xff0c;相信大家用了 Go 语言那么久这这种数据类型并不陌生&#xff0c;但是平日里聊到关于切片是如何扩容的&#xff0c;很多人可能会张口就来&#xff0c;切片扩容的时候&#xff0c;如果老…

centos 安装 percona-xtrabackup

一、yum安装 1.安装Percona yum存储库 yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm 2.启用Percona Server 8.0存储库 percona-release setup ps57 3.输出如下则安装成功 [rootlocalhost ~]# percona-release setup ps80 * Disabling all…

unity中绑定动画的行为系统

主要代码逻辑是创建一个action队列,当动画播放结束时就移除队头,执行后面的事件 public class Enemy : MonoBehaviour {public event Action E_AnimatorFin;//当动画播放完毕时public Action DefaultAction;//默认事件public Dictionary<Action, string> EventAnimator n…

基于 chinese-roberta-wwm-ext 微调训练中文命名实体识别任务

一、模型和数据集介绍 1.1 预训练模型 chinese-roberta-wwm-ext 是基于 RoBERTa 架构下开发&#xff0c;其中 wwm 代表 Whole Word Masking&#xff0c;即对整个词进行掩码处理&#xff0c;通过这种方式&#xff0c;模型能够更好地理解上下文和语义关联&#xff0c;提高中文文…

振弦传感器和振弦采集仪应用隧道安全监测的解决方案

振弦传感器和振弦采集仪应用隧道安全监测的解决方案 现代隧道越来越复杂&#xff0c;对于隧道安全的监测也变得越来越重要。振弦传感器和振弦采集仪已经成为了一种广泛应用的技术&#xff0c;用于隧道结构的监测和评估。它们可以提供更精确的测量结果&#xff0c;并且可以在实…