当前位置:网站首页>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开发技术,欢迎投稿和订阅,让我们一起携手前行共建鸿蒙生态。
边栏推荐
- mysql generates random name, mobile number, date
- JMeter notes 6 | JMeter recording agent (configuration)
- Volatile: JVM I warn you, my people don't move
- .NET 6学习笔记(4)——解决VS2022中Nullable警告
- crm系统哪家好?好用的crm管理系统推荐
- 本机号码一键登录原理
- How to choose a good SaaS knowledge base tool?
- Jenkins使用pipeline部署服务到远程服务器
- MySQL索引的B+树到底有多高?
- 动态RDLC报表(五)
猜你喜欢
[极客大挑战 2019]HardSQL
Redis的那些事:一文入门Redis的基础操作
十七、一起学习Lua 错误处理
50道Redis面试题,来看看你会多少?
Problems Existing in Hardware Development of Electronic Products
The principle implementation of handwritten flexible.js, I finally understand the multi-terminal adaptation of the mobile terminal
[SUCTF 2019]CheckIn
动手学深度学习_全卷积网络 FCN
One-key login principle of local number
【解决】虚拟机VMware通过局域网连接机器人no route to host
随机推荐
ABP详细教程——模块类
学长告诉我,大厂MySQL都是通过SSH连接的
WPF 实现柱形统计图
Volatile: JVM I warn you, my people don't move
【ROS2原理9】 QoS - 截止日期、活跃度和寿命
进行知识管理的好处有哪些?
Prometheus full installation
Problems Existing in Hardware Development of Electronic Products
.NET MAUI 跨平台应用开发 I|.NET MAUI 跨平台基础
SkiaSharp 之 WPF 自绘 投篮小游戏(案例版)
Volatile:JVM 我警告你,我的人你别乱动
AlphaControls 控件 TsPanel TsGroupBox 块与组的结合
动态RDLC报表(七)
逻辑越权和水平垂直越权支付篡改,验证码绕过,接口
JVM内存模型和结构详解(五大模型图解)
搭建Zabbix监控系统
学长告诉我,大厂MySQL都是通过SSH连接的
What is hardware integrated development?What are the cores of hardware integrated development?
Smart Tool Management System
The principle implementation of handwritten flexible.js, I finally understand the multi-terminal adaptation of the mobile terminal