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 拖拽的文章,实现方式和网上能搜到的方法大致相同,别无二致,但是在一次偶然的测试中发现,这种绑定事件的方式可能会和其它的拖拽事件产生冲突,由此产生了对于事件绑定的思考.本文 ...
随机推荐
- GaussDB(DWS)集群通信:详解pooler连接池
本文分享自华为云社区<GaussDB(DWS) 集群通信系列一:pooler连接池>,作者:半岛里有个小铁盒. 1.前言 适用版本:[8.1.0(及以上)] GaussDB(DWS) 为M ...
- 聊聊Web项目中的权限设计
一般的Web项目中都少不了登录这个环节,登录之后就需要跳转到首页,并且根据 当前用户的信息,获取到对应的菜单信息,可以操作的方法信息等等.这个只是针对于 操作权限,至于数据权限处理起来会更加复杂一些. ...
- vscode 自动格式化 好使的配置 setting.json 20210622
一直用idea,今天有个需求得用vscode,发现格式化不好使了 用 vetur 格式化 结果带分行什么的,eslint 过去不了,更新了个好使的配置,记录一下. { "update.mod ...
- python 读取串口数据常用函数及实例分析
前记: 人生苦短,我用python,python在做一些算法验证和接口验证方面,的确是非常的好用.读取串口经常用到,这里就做个总结,给自己和周围的人做个备忘吧. 函数解析: 初始化串口数据: impo ...
- 关于使用Kotlin开发SpringBoot项目使用@Transactional和@Autowired的报错问题
原文地址: 关于使用Kotlin开发SpringBoot项目使用@Transactional和@Autowired的报错问题 - Stars-One的杂货小窝 问题描述 最近在开发一个订单模块,需要出 ...
- 精通 Grails: 测试 Grails 应用程序
排除 bug,构建可执行文档 Grails 可以轻松确保您的应用程序从始至终都远离 bug.这还有另一个好处,您可以利用测试代码生成一组通常是最新的可执行文档.本月 Grails 专家 Scott D ...
- socket编程流程
字节序转换(hton) #include <netinet/in.h> unsigned long int htonl(unsigned long int hostlong); unsig ...
- Spring Boot学习日记
学习了springboot 的优点 为所有Spring开发者更快的入门 开箱即用,提供各种默认配置来简化项目配置 内嵌式容器简化Web项目 没有冗余代码生成和XML配置的要求 Spring开发-Hel ...
- golang 依赖控制反转(IoC) 改进版
最近在开发基于golang下的cqrs框架 https://github.com/berkaroad/squat (陆续开发中,最近断了半年,懒了...).这个框架依赖ioc框架,因为之前写了一个io ...
- 利用kali自带的msfvenom工具生成远程控制软件
一.首先还是得打开postgresql service postgresql start 然后让我们看看它有哪些功能 部分参数 -p 选择一个载荷,或者说一个模块吧. -i 载荷列表 -f 生成的文件 ...