国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

HarmonyOS 實現一個滑塊驗證

系統 OpenHarmony
本篇文章我來嘗試著實現一個滑動驗證碼。當然,這種驗證碼一般都是第三方來處理的,因為它不僅僅只是滑動,還會判斷用戶的拖放軌跡是否符合真實用戶的行為特征,所以我只是簡單的實現。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

前言

日常我們經常能見到驗證碼,網站上的驗證碼的作用是保護網站安全,一般網站都要通過驗證碼來防止機器大規模注冊等危害。一般驗證碼有:圖像驗證、算數驗證、滑動驗證等。有些驗證碼驗證起來有些麻煩,對我來說,最方便的驗證方式是滑動滑塊驗證,滑塊驗證的使用體驗非常好。

所以本篇文章我來嘗試著實現一個滑動驗證碼。當然,這種驗證碼一般都是第三方來處理的,因為它不僅僅只是滑動,還會判斷用戶的拖放軌跡是否符合真實用戶的行為特征,所以我只是簡單的實現。

介紹

這是一個滑塊驗證碼,用戶只需要將滑塊滑到最右側,即可判斷用戶是否驗證成功。

效果展示

我為滑塊驗證添加了驗證條件,用戶可以對滑塊速度做限制,例如:滑塊滑倒右側時,平均速度小于3,如果用戶滑動速度大于3時,就驗證失敗。

#夏日挑戰賽# HarmonyOS 實現一個滑塊驗證-開源基礎軟件社區

我一共滑動了三次:

  • 第一次:沒有滑倒最右側,認證失敗。
  • 第二次:滑動的速度太塊,認證失敗。
  • 第三次:滑動速度符合限制,認證成功。

使用

1、參數支持

參數名稱

參數描述

參數類型

默認值

width

滑塊寬度

Number

300

height

滑塊高度

Number

50

limit

滑塊的速率限制

Number

4

2、事件支持

事件名稱

事件描述

getMsg

驗證通過或不通過事件

用戶可以設置限制體速率,可以通過自定義事件getMsg,獲取到驗證的結果。

#夏日挑戰賽# HarmonyOS 實現一個滑塊驗證-開源基礎軟件社區

原理分析

1、滑動原理

首先,我們需要在組件加載完成時,獲取到滑塊可以滑動的最大距離,我們用得到的最大距離,來判斷滑塊是否滑倒最右側

注意組件的生命周期,在自定義組件中,是沒有onShow的,需要用onLayoutReady(),這個鉤子函數是自定義組件布局完成調用的。

然后,在觸摸屏幕事件中,獲取觸摸的X坐標,此坐標為起始點;在觸摸移動事件中,獲取最新的X坐標,再減去起始坐標,就能得到偏移量。

最后,判斷偏移量是否大于滑塊可以滑動的最大距離,如果不大于,將偏移量設置為滑塊的滑動距離。

為了更好理解,我把滑塊隱藏部分顯示出來。

#夏日挑戰賽# HarmonyOS 實現一個滑塊驗證-開源基礎軟件社區

touchstart (e) {
//設置X軸的始點
this.startPositionX = e.touches[0].localX;
this.startTime = 0
this.s = 0
this.num = 0
},
//滑塊移動中執行的事件
touchmove (e) {
const offsetX = e.touches[0].localX - this.startPositionX
// 如果驗證成功后仍允許滑動,則執行下面代碼塊(初始值默認為允許)
if (this.isSlide) {
//當x坐標大于最大可移動距離,那么當前x坐標即為最大可移動距離
if (offsetX >= this.max) {
this.x = this.max
} else {
// 將當前鼠標x坐標給滑塊移動的距離
this.x = offsetX;
}
}
},

2、驗證原理

這里的驗證不嚴謹,只是一個小嘗試。

驗證原理主要是通過滑動的平均速度來判斷的,如果用戶滑動速度超過設定速度,則驗證失敗。

所以我們需要使用到時間戳。

第一步,我們在移動事件一開始,獲取到當前的時間戳;在移動事件結束將當前時間戳賦值給上一個時間,這樣通過當前時間戳 -上一個時間就能獲取到時間間隔。

第二步,我們還需要獲取到偏移量,上面滑動原理已經介紹了如何獲取。

第三步,有了時間間隔和偏移量,我們可以計算出本次滑動的速度,再利用總的滑動次數來獲取到平均速度。

最后,我們只需要在touchend事件中做判斷,判斷滑塊是否到達滑動的最大距離,并且滑塊滑動的平均速度是否符合限制。

touchmove (e) {
const offsetX = e.touches[0].localX - this.startPositionX
const currTime = Date.now()
if (this.startTime !== 0) {
const duration = currTime - this.startTime
// 傳入倒數第二個點和最后一個點,和持續時間,會返回加速度
const v = parseInt(offsetX / duration)
this.num++
this.s = this.s + v
}
this.startTime = currTime
// 如果驗證成功后仍允許滑動,則執行下面代碼塊(初始值默認為允許)
if (this.isSlide) {
//當x坐標大于最大可移動距離,那么當前x坐標即為最大可移動距離
if (offsetX >= this.max) {
this.x = this.max
} else {
// 將當前鼠標x坐標給滑塊移動的距離
this.x = offsetX;
}
}
},
//松開滑塊執行的事件
touchend (e) {
// 計算平均速度
const avg = this.s / this.num
console.log(avg)
//自定義組件觸發事件時提供的data對象
var data = {};
//如果觸摸的X軸坐標大于等于限定的可移動范圍,并且滑動的平均速度不能超過100,則驗證成功
if (this.x == this.max && avg < this.limit) {
//設置驗證成功提示語
this.status = '驗證成功';
//設置data對象的返回值
data.msg = true;
//驗證成功后,禁止滑塊滑動
this.isSlide = false;
} else {
//元素X軸坐標歸0
this.x = 0;
//清空驗證成功提示語
this.status = '';
this.tip = '驗證失敗'
//設置data對象的返回值
data.msg = false;
}
this.$emit('getMsg', data)
}

完整代碼

index.js:

// @ts-nocheck
export default{
data:{
tip: '右滑驗證',
x: 0,//X軸的初始值
startPositionX: 0,//觸摸時X軸的值
max: 0,//滑塊可移動的X軸范圍
status: '',//驗證完后的提示信息
isSlide: true,//是否允許驗證成功后繼續滑動
positionList: {}, // 存儲坐標位置
startTime: 0,
num: 0, // 總次數
s: 0 // 速度之和
},
props: {
limit: {
type: Number,
default: 4
},
width: {
type: Number,
default: 400
},
height: {
type: Number,
default: 100
}
},
onLayoutReady(){
let ball = this.$element("ball")
let box = this.$refs.container
// 滑塊可以移動的最大距離
this.max = box.getBoundingClientRect().width - ball.getBoundingClientRect().width
},
touchstart (e) {
//設置X軸的始點
this.startPositionX = e.touches[0].localX;
this.startTime = 0
this.s = 0
this.num = 0
},
//滑塊移動中執行的事件
touchmove (e) {
const offsetX = e.touches[0].localX - this.startPositionX
const currTime = Date.now()
if (this.startTime !== 0) {
const duration = currTime - this.startTime
// 傳入倒數第二個點和最后一個點,和持續時間,會返回加速度
const v = parseInt(offsetX / duration)
this.num++
this.s = this.s + v
}
this.startTime = currTime
// 如果驗證成功后仍允許滑動,則執行下面代碼塊(初始值默認為允許)
if (this.isSlide) {
//當x坐標大于最大可移動距離,那么當前x坐標即為最大可移動距離
if (offsetX >= this.max) {
this.x = this.max
} else {
// 將當前鼠標x坐標給滑塊移動的距離
this.x = offsetX;
}
}
},
//松開滑塊執行的事件
touchend (e) {
// 計算平均速度
const avg = this.s / this.num
//自定義組件觸發事件時提供的data對象
var msg = {};
//如果觸摸的X軸坐標大于等于限定的可移動范圍,并且滑動的平均速度不能超過100,則驗證成功
if (this.x == this.max && avg < this.limit) {
//設置驗證成功提示語
this.status = '驗證成功';
//設置data對象的返回值
msg = true;
//驗證成功后,禁止滑塊滑動
this.isSlide = false;
} else {
//元素X軸坐標歸0
this.x = 0;
//清空驗證成功提示語
this.status = '';
this.tip = '驗證失敗'
//設置data對象的返回值
msg = false;
}
this.$emit('getMsg', msg)
}
}

總結

不足點:驗證條件比較簡單。

文章相關附件可以點擊下面的原文鏈接前往下載:

https://ost.51cto.com/resource/2234。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??。

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2022-07-13 15:31:29

手繪板canvas鴻蒙

2022-07-28 14:20:44

懸浮球鴻蒙

2022-08-01 14:07:26

canvas繪畫板

2020-12-20 10:07:57

Canvas圖形驗證碼javascript

2021-09-07 07:34:42

CSS 技巧代碼重構

2020-09-24 11:46:03

Promise

2017-12-12 15:24:32

Web Server單線程實現

2022-01-04 11:08:02

實現Localcache存儲

2014-04-14 15:54:00

print()Web服務器

2023-09-22 11:51:13

PythonFlask

2022-08-05 19:27:22

通用API鴻蒙

2011-03-28 09:56:03

存儲增刪操作

2023-02-26 01:37:57

goORM代碼

2023-03-01 09:39:40

調度系統

2023-05-22 09:10:53

CSSloading 效

2020-08-17 08:20:16

iOSAOP框架

2022-05-13 07:42:25

JS編程題LazyMan

2024-12-06 09:58:09

2022-11-29 17:34:43

虛擬形象系統

2025-05-20 08:00:00

鏈式調用異步
點贊
收藏

51CTO技術棧公眾號

国产suv精品一区二区四区视频| 成人看片在线观看| 97电影在线| 一级日韩一区在线观看| 欧美1区视频| 四虎国产精品永远| 孩xxxx性bbbb欧美| 亚洲激情成人在线| 色哺乳xxxxhd奶水米仓惠香| 国产乱真实合集| 亚洲天堂视频在线观看| 蜜桃久久久久久| 欧美韩日亚洲| 日韩成人在线资源| 亚洲精品在线电影| 男男视频亚洲欧美| av日韩中文| 国产四区在线观看| 亚洲色图18p| av亚洲产国偷v产偷v自拍| 久久电影天堂| 伊人精品久久| 成人黄色777网| 亚洲视频在线视频| 91网上在线视频| 涩爱av在线播放一区二区| 欧美欧美欧美| 992tv在线成人免费观看| 一区二区日韩电影| 午夜免费久久久久| 性做久久久久久免费观看欧美| 好吊日精品视频| 夜鲁夜鲁夜鲁视频在线播放| 最新日本视频| 日韩av电影手机在线观看| 久久嫩草精品久久久精品| 1pondo在线播放免费| 97视频在线免费观看| 五月婷婷久久综合| 久久天天综合| 美女精品久久| 韩国中文字幕2020精品| 黄色一级片国产| 国产999精品| 欧美一区二区三区视频在线| 99r精品视频| 欧美 日韩 国产一区二区在线视频 | 国产真实乱偷精品视频免| 激情欧美日韩| 伊人久久大香线蕉综合影院首页| 伊人网在线免费观看| 午夜啪啪免费视频| 欧美最近摘花xxxx摘花| 69av一区二区三区| 国产精品欧美精品| 91网站最新网址| 99精品电影| 婷婷成人av| 亚洲s色大片| 欧美伦理视频在线观看| 精品一区二区久久久久久久网站| 欧美xxxx18性欧美| 6080午夜不卡| 国产精品理伦片| 奇米一区二区三区av| sdde在线播放一区二区| 88xx成人网| 成人看av片| 无圣光视频在线观看| 久久久国产欧美| 欧美国产视频一区| 国产高清精品一区| 久久99视频精品| 日韩一区二区在线免费观看| **性色生活片久久毛片| 久久久久看片| 色哟哟免费在线观看| 国产激情片在线观看| 国产精品高潮呻吟久久av黑人| 欧美mv和日韩mv的网站| 亚洲精品成人悠悠色影视| 日韩精品1区| www.久久爱.com| 国产麻花豆剧传媒精品mv在线| 国产综合 伊人色| 国产精品国语对白| 欧美国产日韩一区二区在线观看| 精品久久人人做人人爽| 欧美日韩国产一区二区| 国产欧美日韩在线观看| 亚洲精品97| 日韩激情美女| 亚洲欧美久久234| 久久久久国产精品免费网站| 一区二区欧美精品| 噜噜噜在线观看免费视频日韩| 国产精久久一区二区| 日本午夜在线| 四虎4hu永久免费入口| 久久久精品一区| 99久久影视| 欧美78videosex性欧美| 午夜精品久久久内射近拍高清 | 草草影院在线| 亚洲va久久久噜噜噜久久狠狠| 亚洲精品一区av在线播放| 亚洲国产精品精华液2区45| 亚洲精品国产成人影院| 日本在线视频一区二区| 中文字幕av在线| 亚洲五码在线观看视频| 国产精品久久久久久av| www.美女亚洲精品| 欧美性xxxx极品hd欧美风情| 老司机精品导航| 麻豆mv在线看| 日本美女高潮视频| 亚洲欧洲三级| 91啪国产在线| 韩国视频理论视频久久| 精品视频在线观看日韩| 一本色道久久综合亚洲精品按摩| 成人一区二区三区视频在线观看| 色爱综合网欧美| 欧美一级免费| 18视频在线观看| 在线一区二区三区精品| 人妻内射一区二区在线视频| 亚洲精品在线免费| 99免费在线观看视频| 午夜精品在线视频| 中文字幕一区二区精品| 日韩三级av在线播放| 疯狂做受xxxx高潮欧美日本| 久久亚洲精品小早川怜子| 爽好久久久欧美精品| 中文字幕一区二区三区在线视频| 婷婷成人在线| 青春草视频在线观看| 成年在线播放小视频| 欧美亚洲精品日韩| 国产精品福利片| 欧美激情2020午夜免费观看| 亚洲人成在线免费观看| 精品乱人伦一区二区三区| 精品久久久久久久中文字幕| 99免费精品视频| 成人国产一区二区三区精品| 蜜臀久久99精品久久久久宅男| 99精品在线免费在线观看| 国产福利一区二区精品秒拍| jizz欧美| 国产欧洲在线| 成人影院www在线观看| 国产一级免费在线观看| 亚洲人成电影| 最新91在线| 日韩精品123| av电影在线观看| av资源种子在线观看| 美丽的姑娘在线观看免费动漫| 啦啦啦啦免费高清视频在线观看1| 免费黄视频网站| 福利在线一区二区三区| 亚洲欧美日韩综合一区| 久久人人爽人人爽人人片av高请| 亚洲电影成人av99爱色| 精品国产伦一区二区三区观看方式| 欧美一区日韩一区| 欧美一级爆毛片| 91精品一区二区三区久久久久久 | 色综合888| h网站在线播放| 四虎在线观看| 在线观看免费网站黄| 亚洲成人三级| bl在线肉h视频大尺度| 丁香花视频在线观看| 美女露胸视频在线观看| 色综合亚洲图丝熟| 夜鲁夜鲁夜鲁视频在线播放| 成人欧美大片| 宅男噜噜噜66国产精品免费| 95精品视频| 丝袜美腿一区二区三区动态图| 欧美偷拍综合| 欧美午夜在线| 欧美久久久久| 国产一区二区三区的电影| 99久久久久久中文字幕一区| 精品按摩偷拍| 在线视频亚洲专区| 在线看片不卡| 日韩成人av影视| 懂色av中文一区二区三区| 本田岬高潮一区二区三区| 久久久不卡网国产精品一区| 亚洲婷婷综合色高清在线| 亚洲.国产.中文慕字在线| 欧美日韩精品三区|