当前位置:网站首页>#夏日挑战赛# HarmonyOS 实现一个滑块验证
#夏日挑战赛# HarmonyOS 实现一个滑块验证
2022-08-04 15:34:00 【51CTO】
前言
日常我们经常能见到验证码,网站上的验证码的作用是保护网站安全,一般网站都要通过验证码来防止机器大规模注册等危害。一般验证码有:图像验证、算数验证、滑动验证等。有些验证码验证起来有些麻烦,对我来说,最方便的验证方式是滑动滑块验证,滑块验证的使用体验非常好。
所以本篇文章我来尝试着实现一个滑动验证码。当然,这种验证码一般都是第三方来处理的,因为它不仅仅只是滑动,还会判断用户的拖放轨迹是否符合真实用户的行为特征,所以我只是简单的实现。
介绍
这是一个滑块验证码,用户只需要将滑块滑到最右侧,即可判断用户是否验证成功。
效果展示
我为滑块验证添加了验证条件,用户可以对滑块速度做限制,例如:滑块滑倒右侧时,平均速度小于3,如果用户滑动速度大于3时,就验证失败

我一共滑动了三次
- 第一次:没有滑倒最右侧,认证失败
- 第二次:滑动的速度太块,认证失败
- 第三次:滑动速度符合限制,认证成功
使用
1.参数支持
| 参数名称 | 参数描述 | 参数类型 | 默认值 |
|---|---|---|---|
| width | 滑块宽度 | Number | 300 |
| height | 滑块高度 | Number | 50 |
| limit | 滑块的速率限制 | Number | 4 |
2.事件支持
| 事件名称 | 事件描述 |
|---|---|
| getMsg | 验证通过或不通过事件 |
用户可以设置限制体速率,可以通过自定义事件getMsg,获取到验证的结果
原理分析
1.滑动原理
首先,我们需要在组件加载完成时,获取到滑块可以滑动的最大距离,我们用得到的最大距离,来判断滑块是否滑倒最右侧
注意组件的生命周期,在自定义组件中,是没有onShow的,需要用onLayoutReady(),这个钩子函数是自定义组件布局完成调用的。
然后,在触摸屏幕事件中,获取触摸的X坐标,此坐标为起始点;在触摸移动事件中,获取最新的X坐标,再减去起始坐标,就能得到偏移量
最后,判断偏移量是否大于滑块可以滑动的最大距离,如果不大于,将偏移量设置为滑块的滑动距离
为了更好理解,我把滑块隐藏部分显示出来
2.验证原理
这里的验证不严谨,只是一个小尝试
验证原理主要是通过滑动的平均速度来判断的,如果用户滑动速度超过设定速度,则验证失败
所以我们需要使用到时间戳
第一步,我们在移动事件一开始,获取到当前的时间戳;在移动事件结束将当前时间戳赋值给上一个时间,这样通过当前时间戳 -上一个时间就能获取到时间间隔
第二步,我们还需要获取到偏移量,上面滑动原理已经介绍了如何获取
第三步,有了时间间隔和偏移量,我们可以计算出本次滑动的速度,再利用总的滑动次数来获取到平均速度。
最后,我们只需要在touchend事件中做判断,判断滑块是否到达滑动的最大距离,并且滑块滑动的平均速度是否符合限制。
完整代码
index.js
总结
不足点:验证条件比较简单
边栏推荐
- 7 天学个Go,Go 结构体 + Go range 来学学
- Next -20- 使用自定义样式 (custom style)
- 推荐一个鸿蒙即时通讯软件《果聊》
- MySQL select加锁分析
- Projector reached the party benefits 】 【 beginners entry - brightness projection and curtain selection - from entry to the master
- 界面组件DevExpress ASP.NET Core v22.1 - 增强数据导出功能
- 直播系统开发——直播间架构的设计及难点分析
- 2022 Hangzhou Electric Multi-School 4
- 弄懂#if #ifdef #if defined
- Redis 高可用
猜你喜欢
随机推荐
全球电子产品需求放缓,三星手机越南工厂每周只需要干 3~4 天
你以为在做的是微服务?不!你做的只是分布式单体!
qt 复杂界面信号槽设计
指数族分布与最大熵
界面组件DevExpress ASP.NET Core v22.1 - 增强数据导出功能
弄懂#if #ifdef #if defined
Semaphore 基本原理
手搓一个“七夕限定”,用3D Engine 5分钟实现烟花绽放效果
C# 谁改了我的代码
Next -20- 使用自定义样式 (custom style)
365天挑战LeetCode1000题——Day 049 非递增顺序的最小子序列 贪心
2022年7月国产数据库大事记-墨天轮
RepVGG学习笔记
基于 Next.js实现在线Excel
分支控制if-else
"Research Report on the Development of Global Unicorn Enterprises in the First Half of 2022" released - DEMO WORLD World Innovation Summit ended successfully
卖家寄卖流程梳理
leetcode: 251. Expanding 2D Vectors
使用百度EasyDL实现森林火灾预警识别
Jupyter常用操作总结(强烈建议收藏,持续更新实用操作)










