List拖拽功能的实现
概述
核心功能
- 列表初始化:创建并填充列表数据。
- 拖拽交互:实现列表项的拖拽功能,包括拖拽开始、移动和结束。
- 位置交换:在拖拽结束时交换列表项的位置。
代码实现
1. 组件状态和变量
@State numbers: string[] = []; // 存储列表项的数组
moveIndex: number = -1; // 记录当前被拖拽项的索引
numbers数组用于存储列表中的项,而moveIndex变量用于追踪当前正在被拖拽的项的索引。2. 拖拽样式构建器
@Builder
pixelMapBuilder(text: string) {
Column() {
Text(text)
.opacity(0) // 拖拽时文本不可见
}
}
pixelMapBuilder方法定义了拖拽过程中显示的样式。在这里,我们将文本的透明度设置为0,使其在拖拽过程中不可见。3. 初始化数据
aboutToAppear() {
this.numbers.fill(null, 0, 15);
for (let i = 1; i <= 15; i++) {
this.numbers[i - 1] = i + '';
}
}
aboutToAppear方法将被调用,用于初始化列表数据。4. 交换数组位置的方法
changeIndex(index1: number, index2: number) {
[this.numbers[index1], this.numbers[index2]] = [this.numbers[index2], this.numbers[index1]];
}
changeIndex方法用于交换数组中两个位置的元素,这是实现拖拽功能的核心。5. 组件构建方法
build() {
Column({ space: 10 }) {
List({ space: 10 }) {
ForEach(this.numbers, (day: string, index: number) => {
ListItem() {
Text(day)
// 列表项样式设置
}
.transition({ type: TransitionType.Insert, translate: { y: 5 } });
})
// 拖拽事件处理
.onItemDragStart((event, itemIndex) => {
this.moveIndex = itemIndex;
return this.pixelMapBuilder(this.numbers[itemIndex]);
})
.onItemDragMove((event, itemIndex, insertIndex) => {
if (this.moveIndex !== insertIndex) {
animateTo({ duration: 300 }, () => {
this.changeIndex(this.moveIndex, insertIndex);
this.moveIndex = insertIndex;
});
}
});
}
// 其他布局和样式设置
}
}
build方法中,我们创建了一个Column布局,并在其中嵌套了一个List组件。ForEach遍历numbers数组,为每个元素创建一个列表项。我们还为列表项添加了插入时的过渡动画效果。.onItemDragStart和.onItemDragMove方法处理。在拖拽开始时,我们记录下被拖拽项的索引,并创建拖拽样式。在拖拽移动时,如果插入索引发生变化,我们执行位置交换,并更新moveIndex。总结
List拖拽功能的实现的更多相关文章
- RCP:拖拽功能的实现 Drag and Drop
SWT中的拖拽是使用的org.eclipse.swt.dnd. 有三个需要密切注意的类: 1.DragSource 2.DropTarget 3.Transfer DragSource封装了需要被拖拽 ...
- js实现登陆页面的拖拽功能
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>登 ...
- duilib中控件拖拽功能的实现方法(附源码)
转载请说明原出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/41144283 duilib库中原本没有显示的对控件增加拖拽的功能,而实际 ...
- React Editor 应用编辑器(1) - 拖拽功能剖析
这是可视化编辑器 Gaea-Editor 的第一篇连载分析文章,希望我能在有限的篇幅讲清楚制作这个网页编辑器的动机,以及可能带来的美好使用前景(画大饼).它会具有如下几个特征: 运行在网页 文档流布局 ...
- DIV 实现可拖拽 功能(留档)
//可拖拽 功能 $.fn.extend({ //用法:$(element).jqDrag(); //element需要具备定位属性,需要手动调整层叠样式,这里只是修改鼠标拖动效果 ...
- 使用NGUI实现拖拽功能(拼图小游戏)
上一次用UGUI实现了拼图小游戏,这次,我们来用NGUI来实现 实现原理 NGUI中提供了拖拽的基类UIDragDropItem,所以我们要做的就是在要拖拽的图片上加一个继承于该类的脚本,并实现其中的 ...
- 使用UGUI实现拖拽功能(拼图小游戏)
实现方式 1.引入UGUI自带的事件系统 UnityEngine.EventSystems 2.为我们的类添加接口 IBeginDragHandler, IDragHandler, IEndDragH ...
- JQuery UI的拖拽功能
JQuery UI是JQuery官方支持的WebUI 代码库,包含底层交互.动画.特效等API,并且封装了一些Web小部件(Widget).同时,JQuery UI继承了jquery的插件支持,有大量 ...
- 通过 JS 实现简单的拖拽功能并且可以在特定元素上禁止拖拽
前言 关于讲解 JS 的拖拽功能的文章数不胜数,我确实没有必要大费周章再写一篇重复的文章来吸引眼球.本文的重点是讲解如何在某些特定的元素上禁止拖拽.这是我在编写插件时遇到的问题,其实很多插件的拖拽功能 ...
- 关于 JS 拖拽功能的冲突问题及解决方法
前言 我在之前写过关于 JS 拖拽的文章,实现方式和网上能搜到的方法大致相同,别无二致,但是在一次偶然的测试中发现,这种绑定事件的方式可能会和其它的拖拽事件产生冲突,由此产生了对于事件绑定的思考.本文 ...
随机推荐
- VMware workstation虚拟机联网的方法
注意:我的虚拟机所安装的系统是Centos 方法一: 第一步:先设置VMware的编辑--虚拟网络编辑器,启用VMnet8,NAT模式,如下图所示. 其实就是VMware默认的设置,无须更改,如果不小 ...
- 【风控算法】二、SQL->Python->PySpark计算KS,AUC及PSI
KS,AUC 和 PSI 是风控算法中最常计算的几个指标,本文记录了多种工具计算这些指标的方法. 生成本文的测试数据: import pandas as pd import numpy as np i ...
- ip 表单验证 vue iview
ip 表单验证 vue iview template <Row v-show="config.bindIP"> <Col span="12"& ...
- 自己想到的几道Java面试题
1.在抽象类中能否写main方法,为什么? 2.在接口中能否写main方法,为什么? 3.Java能否使用静态局部变量,为什么? 4.Java类变量,实例变量,局部变量在多线程环境下是否线程安全,为什 ...
- 基于PyQGIS实现遥感影像下载
1. 引言 之前的文章:QGIS中下载遥感影像的Python代码片段 - 当时明月在曾照彩云归 - 博客园 (cnblogs.com),记述了在 QGIS 的 Python Console 中使用Py ...
- [HTML、CSS]细节、经验
[版权声明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/130134573 出自[进步* ...
- 【K8S】Docker向私有仓库拉取/推送镜像报错(http: server gave HTTP response to HTTPS client)
这里,我们搭建的Harbor仓库的地址为 http://192.168.175.101:1180. 报错信息如下所示. [root@binghe101 ~]# docker login 192.168 ...
- NFNet:NF-ResNet的延伸,不用BN的4096超大batch size训练 | 21年论文
论文认为Batch Normalization并不是网络的必要构造,反而会带来不少问题,于是开始研究Normalizer-Free网络,希望既有相当的性能也能支持大规模训练.论文提出ACG梯度裁剪方法 ...
- KingbaseES 物化视图与源表的依赖关系
KingbaseES例程_重建物化视图的源表 概述 数据结构的修改步骤,数据表先删除,然后创建.如果数据表是物化视图的源表,则提示依赖关系. Oracle的实施 创建数据表和物化视图 create t ...
- KingbaseES V8R6 集群运维案例 -- 磁盘空间问题导致集群故障
某商业银行生产系统KingbaseES读写分离集群主库出现故障,导致集群主备发生切换.客户要求说明具体的原因. KingbaseES读写分离集群基本信息: KingbaseES集群信息 操作系统 ...