当前位置:网站首页>HarmonyOS - 基于ArkUI (JS) 实现图片旋转验证
HarmonyOS - 基于ArkUI (JS) 实现图片旋转验证
2022-08-09 16:57:00 【51CTO】
作者:王少丽
前言
通过学习其他人的slider滑块组件衍生出的小组件, 本文主要结合HarmonyOS官网上的相关组件以及通用API,来实现一个图片的旋转验证 – 需拖动滑块将图片旋转还原为正确,方可验证通过。
效果演示

实现原理
触发条件
基于HarmonyOS通用事件touchstart和touchmove,touchend,通过手指刚触摸屏幕时触发、手指触摸屏幕后移动时触发事件,手指触摸屏幕后结束时触发事件;
实现slider滑块效果
通过touches触摸事件的属性集合,返回屏幕触摸点的信息数组,拿到localX距离被触摸组件左上角横向距离,动态计算出子元素的宽度来实现slider滑块效果。
实现图片旋转效果
初始化随机生成360°以内的角度,设置图片原点,360°除以100就得到圆的步长比上滑动距离除滑块总长度,最后加上图片原点就等于旋转后的角度。
使用到的官方API
通用方法
getBoundingClientRect()
获取元素的大小及其相对于窗口的位置。
| 属性 | 类型 | 描述 |
|---|---|---|
| width | number | 该元素的宽度。 |
| height | number | 该元素的高度。 |
| left | number | 该元素左边界距离窗口的偏移。 |
| top | number | 该元素上边界距离窗口的偏移。 |
通用事件
| 名称 | 参数 | 描述 | 是否支持冒泡 |
|---|---|---|---|
| touchstart | TouchEvent | 手指刚触摸屏幕时触发该事件。 | 是5+ |
| touchmove | TouchEvent | 手指触摸屏幕后移动时触发该事件。 | 是5+ |
| touchend | TouchEvent | 手指触摸屏幕后结束时触发该事件。 | 是5+ |
| 属性 | 类型 | 说明 |
|---|---|---|
| touches | Array<TouchInfo> | 触摸事件时的属性集合,包含屏幕触摸点的信息数组。 |
| 属性 | 类型 | 说明 |
|---|---|---|
| globalX | number | 距离屏幕左上角(不包括状态栏)横向距离。屏幕的左上角为原点。 |
| globalY | number | 距离屏幕左上角(不包括状态栏)纵向距离。屏幕的左上角为原点。 |
| localX | number | 距离被触摸组件左上角横向距离。组件的左上角为原点。 |
| localY | number | 距离被触摸组件左上角纵向距离。组件的左上角为原点。 |
实现过程
1. htm部分
2. css部分
3. js部分
总结
这篇文章是我通过对slider滑块的一个延伸练习,也算是一个比较常用的组件,后续部分功能还需完善,比如在样式、功能及代码优化方面等等,还有很多不足之处,大家有想法的可以提出来,我们一起学习,共同进步!
更多原创内容请关注: 中软国际 HarmonyOS 技术团队
入门到精通、技巧到案例,系统化分享HarmonyOS开发技术,欢迎投稿和订阅,让我们一起携手前行共建鸿蒙生态。
边栏推荐
- Entry node of ring in leetcode/linked list
- 谭中意:你知道 “开源女王” 是谁吗?
- How tall is the B+ tree of the MySQL index?
- leetcode300.最长递增子序列(动态规划)
- 本机号码一键登录原理
- ABP详细教程——模块类
- 华为云全流程护航《流浪方舟》破竹首发,打造口碑爆款
- .NET 6 study notes (4) - Solve the Nullable warning in VS2022
- 微软 .NET Core 3.1 年底将结束支持,请升级到.NET 6
- SkiaSharp 之 WPF 自绘 粒子花园(案例版)
猜你喜欢

Lagrange interpolation formula matlab implementation

JMeter notes 6 | JMeter recording agent (configuration)

艺术与科技的狂欢,云端XR支撑阿那亚2022砂之盒沉浸艺术季

BSN季度版本2022年8月31日迭代更新预告

【机器学习】回归树生成过程及举例理解

crm系统哪家好?好用的crm管理系统推荐

The strongest distributed lock tool: Redisson

What platform is EPIC?

《.NET物联网从零开始》系列

一口气拿下6个大厂offer,是什么水平
随机推荐
动手学深度学习_风格迁移
win10 uwp 绑定静态属性
动态RDLC报表(二)
开篇-开启全新的.NET现代应用开发体验
Guo Wei (Guo Daxia): Nine Yes or No about open source
WinForm(四)一种实现登录的方式
JMeter笔记6 | JMeter录制(配置代理)
本机号码一键登录原理
JVM内存模型和结构详解(五大模型图解)
Discuz! Forum program installation + template configuration tutorial
WPF 实现柱形统计图
进行知识管理的好处有哪些?
Engaged in software testing for a year, only basic functional testing, how to further study?
《.NET物联网从零开始》系列
Redis的那些事:一文入门Redis的基础操作
一文深入了解 Hybrid 的实现原理
Ark: Survival Evolved Open Server Port Mapping Tutorial
【.NET 6】开发minimal api以及依赖注入的实现和代码演示
低代码平台和专业开发人员——完美搭档?
AlphaControls 控件 TsPanel TsGroupBox 块与组的结合