Harmony开发 List、Grid拖动自定义排序实现

1. Harmony开发 List、Grid拖动自定义排序实现

1.1. List拖动功能

  本示例基于显式动画、List组件实现了ListItem的上下拖动、ListItem切换以及ListItem插入的效果。
在这里插入图片描述
  实现思路:List手势拖动

@Entry
@Component
struct ListDragPage {@State private arr: string[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14].map((value) => value.toString())private listScroller: ListScroller = new ListScroller();private dragIndex: number = -1private originDragIndex: number = -1@State itemOffsetList: number[] = []private itemHeight: number = 100private listMargin: number = 10private itemTotalHeight: number = 110// dragItem距离List组件顶部的距离private dragOffsetY: number = 0// dragItem相对于List滚动顶部的距离private relativeOffsetY: number = 0// List组件能滑动的最大距离listMaxScrollOffsetY: number = 0// List组件开始拖动时的偏移originListOffsetY: number = 0// list组件规格private listArea: Area = {width: 0,height: 0,position: {},globalPosition: {}}aboutToAppear(): void {this.itemOffsetList = new Array<number>(this.arr.length)}initState() {for (let i = 0; i < this.itemOffsetList.length; i++) {this.itemOffsetList[i] = 0}this.dragIndex = -1this.originDragIndex = -1this.dragOffsetY = 0this.originListOffsetY = this.listScroller.currentOffset().yOffset}startDragItem(dragIndex: number) {this.initState()animateTo({ curve: Curve.Linear }, () => {this.dragIndex = dragIndexthis.originDragIndex = dragIndex})}increaseDragIndex(eventOffsetY: number) {let tmp = this.arr.splice(this.dragIndex, 1)this.arr.splice(this.dragIndex + 1, 0, tmp[0])this.dragIndex = this.dragIndex + 1this.itemOffsetList[this.dragIndex] =eventOffsetY - (this.dragIndex - this.originDragIndex) * this.itemTotalHeight +this.listScroller.currentOffset().yOffset - this.originListOffsetYthis.itemOffsetList[this.dragIndex - 1] = this.itemTotalHeightanimateTo({ curve: Curve.Sharp, duration: 100 }, () => {this.itemOffsetList[this.dragIndex - 1] = 0})}decreaseDragIndex(eventOffsetY: number) {let tmp = this.arr.splice(this.dragIndex, 1)this.arr.splice(this.dragIndex - 1, 0, tmp[0])this.dragIndex = this.dragIndex - 1this.itemOffsetList[this.dragIndex] =eventOffsetY - (this.dragIndex - this.originDragIndex) * this.itemTotalHeight +this.listScroller.currentOffset().yOffset - this.originListOffsetYthis.itemOffsetList[this.dragIndex + 1] = -this.itemTotalHeightanimateTo({ curve: Curve.Sharp, duration: 100 }, () => {this.itemOffsetList[this.dragIndex + 1] = 0})}cancelDrag() {this.initState()}endDragItem() {animateTo({ curve: Curve.Sharp, duration: 100 }, () => {this.initState()})}build() {Column() {List({ space: this.listMargin

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

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

相关文章

Jules 从私有预览阶段推向全球公测

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

ubuntu上安装mysql

sudo apt update查看可用版本&#xff1a; apt-cache policy mysql-server返回&#xff1a; mysql-server: 已安装&#xff1a;(无) 候选&#xff1a; 8.0.42-0ubuntu0.24.04.1 版本列表&#xff1a; 8.0.42-0ubuntu0.24.04.1 500 500 http://cn.archive.ubuntu.com/ubuntu no…

预先学习:构建智能系统的 “未雨绸缪” 之道

一、预先学习&#xff1a;训练阶段的 “模型预构建” 哲学 1.1 核心定义与生物启发 预先学习的本质是模拟人类的 “经验积累 - 快速决策” 机制&#xff1a;如同医生通过大量病例总结诊断规则&#xff0c;算法在训练阶段利用全量数据提炼规律&#xff0c;生成固化的 “决策模型…

【notes】VScode 使用总结

文章目录 扩展 c/cwindows7 系统下 c/c 自动升级导致的插件无法正常使用 设置 文件格式设置打开文件的默认格式 扩展 c/c windows7 系统下 c/c 自动升级导致的插件无法正常使用 问题 1. c/c扩展的1.25.x版本不再支持windows7 系统&#xff0c;当设置VScode自动升级拓展插件时…

wbs校验

*数据定义 DATA:tab_set_bukrs_gxgsdm5 TYPE TABLE OF rgsb4, rec_set_bukrs_gxgsdm5 LIKE LINE OF tab_set_bukrs_gxgsdm5, r_bukrs_gxgsdm5 TYPE RANGE OF bukrs WITH HEADER LINE. DATA: tab_set_hkont_gxkjkm5 TYPE STANDARD TABLE OF rgsb4, …

kafka入门(二)

Java客户端访问Kafka 引入maven依赖 <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka‐clients</artifactId> <version>2.4.1</version> </dependency> 消息发送端代码 package com.tuling.kafka.ka…

Python----目标检测(PASCAL VOC数据集)

一、PASCAL VOC数据集 PASCAL VOC&#xff08;Visual Object Classes&#xff09;数据集是计算机视觉领域中广泛使用的一个 标准数据集&#xff0c;用于目标检测、图像分割、图像分类、动作识别等任务。该数据集由 PASCAL&#xff08;Pattern Analysis, Statistical Modelling …

mariadb 升级 (通过yum)

* 注意下 服务名, 有的服务器上是mysql,有的叫mariadb,mysqld的 #停止 systemctl stop mysql #修改源 vi /etc/yum.repos.d/MariaDB.repo baseurl http://yum.mariadb.org/11.4/centos7-amd64 #卸载 yum remove mysql #安装 yum install MariaDB-server galera-4 MariaDB-…

vuejs处理后端返回数字类型精度丢失问题

标题问题描述 后端返回数据有5.00和3.30这种数据&#xff0c;但是前端展示的时候返回对应分别为5和3.0&#xff0c;小数点后0都丢失了。 接口返回数据展示network-Response&#xff1a; 接口返回数据展示network-Preview&#xff1a; 错误数据效果展示 发现问题 浏览器接口…

ubuntu kubeasz 部署高可用k8s 集群

ubuntu kubeasz 部署高可用k8s 集群 测试环境主机列表软件清单kubeasz 部署高可用 kubernetes配置源配置host文件安装 ansible 并进行 ssh 免密登录:下载 kubeasz 项⽬及组件部署集群部署各组件开始安装修改 config 配置文件增加 master 节点增加 kube_node 节点登录dashboard…

IDEA2025版本使用Big Data Tools连接Linux上Hadoop的HDFS

目录 Windows的准备 1. 将与Linux上版本相同的hadoop压缩包解压到本地 ​编辑2.设置$HADOOP HOME环境变量指向:E:\hadoop-3.3.4 3.下载hadoop.dll和winutils.exe文件 4.将hadoop.dll和winutils.exe放入$HADOOP HOME/bin中 IDEA中操作 1.下载Big Data Tools插件 2.添加并连…

Java转Go日记(三十九):Gorm查询

1.1.1. 查询 // 获取第一条记录&#xff0c;按主键排序db.First(&user)SELECT * FROM users ORDER BY id LIMIT 1;// 获取最后一条记录&#xff0c;按主键排序db.Last(&user)SELECT * FROM users ORDER BY id DESC LIMIT 1;// 获取所有记录db.Find(&users)SELECT *…

bisheng系列(二)- 本地部署(前后端)

一、导读 环境&#xff1a;Ubuntu 24.04、open Euler 23.03、Windows 11、WSL 2、Python 3.10 、bisheng 1.1.1 背景&#xff1a;需要bisheng二开商用&#xff0c;故而此处进行本地部署&#xff0c;便于后期调试开发 时间&#xff1a;20250519 说明&#xff1a;bisheng前后…

5G金融互联:迈向未来金融服务的极速与智能新时代

5G金融互联:迈向未来金融服务的极速与智能新时代 大家好,我是Echo_Wish,今天咱们聊聊一个大家都十分关心的话题:5G网络在金融服务中的应用。咱们平时可能觉得5G只是打个电话、刷个视频更流畅了,但在金融服务领域,5G的低延时、大带宽和高可靠性正在悄然改变整个游戏规则。…

UE5 GAS框架解析内部数据处理机制——服务器与客户端

当&#xff0c; gas通过点击鼠标光标触发事件时&#xff0c;内部的处理机制。 当通过点击事件&#xff0c;命中中目标时&#xff0c; 可获取到对应的TargetData 目标数据。处理相应的操作。 仅有本地的客户端的情况下。命中并不会有什么异常。 当存在服务器时&#xff0c; 服…

Golang的Web应用架构设计

# Golang的Web应用架构设计 介绍 是一种快速、高效、可靠的编程语言&#xff0c;它在Web应用开发中越来越受欢迎。Golang的Web应用架构设计通常包括前端、后端和数据库三个部分。在本篇文章中&#xff0c;我们将详细介绍Golang的Web应用架构设计及其组成部分。 前端 在Golang的…

对比 HTTP-REST 与 gRPC:各自的优缺点以及适用的场景

文章目录 对比 HTTP-REST 与 gRPC&#xff1a;各自的优缺点以及适用的场景HTTP-REST 与 gRPC 的核心区别gRPC 的优缺点HTTP-REST 的优缺点适用场景 模糊点什么是 Protobuf&#xff1f;HTTP/2 会将 HTTP 消息拆分并封装为二进制帧&#xff0c;那还能过使用 HTTP/2 构建 RESTful …

现代健康生活养生指南

现代社会中&#xff0c;熬夜加班、久坐不动、饮食不规律成为许多人的生活常态&#xff0c;由此引发的健康问题也日益增多。想要摆脱亚健康&#xff0c;不必依赖中医理念&#xff0c;从以下这些现代科学养生方法入手&#xff0c;就能逐步改善身体状况。​ 饮食上&#xff0c;注…

Go语言数组的定义与操作 - 《Go语言实战指南》

在 Go 语言中&#xff0c;数组&#xff08;Array&#xff09; 是一种定长、同类型的集合。它在内存中是连续分布的&#xff0c;适合用于性能敏感的场景。 一、数组的定义 数组的基本语法如下&#xff1a; var 数组名 [长度]元素类型 示例&#xff1a; var nums [5]int …

Helm Chart 中配置多个 Docker Registry 地址以实现备用访问

在 Helm Chart 中配置多个 Docker Registry 地址以实现备用访问&#xff0c;可以通过以下几种方式实现&#xff1a; 1. 在 values.yaml 中定义多个 Registry 在 values.yaml 中定义主 Registry 和备用 Registry&#xff0c;以便在部署时灵活切换&#xff1a; # values.yaml …