Vue3滑動到最右驗(yàn)證功能實(shí)現(xiàn)
1、思路
1、在登錄頁面需要啟動向右滑塊驗(yàn)證
2、效果圖

3、文章地址:滑動驗(yàn)證碼的實(shí)現(xiàn)-vue-simple-verify
2、成分分析
1、由三塊構(gòu)成,分別是底部條、拖動條、拖動移動部分
2、底部條:整體容器,包括背景、邊框和文字(請按住滑塊,拖動到最右邊)
3、拖動條:圖片+邊框+背景色即可
4、完成部分:背景、邊框和文字(驗(yàn)證完成)
3、事件分析
1、鼠標(biāo)按下事件:記錄鼠標(biāo)位置以及狀態(tài)
2、鼠標(biāo)移動事件:計(jì)算滑塊位置
3、鼠標(biāo)離開事件:更新狀態(tài)至初始狀態(tài)
4、鼠標(biāo)抬起事件:更新狀態(tài)至初始狀態(tài)
4、效果圖

5、代碼
1、SlideVerify.vue文件
<template>
<div
ref="sliderContainer"
@mousemove="onMouseMove"
@mouseup="onMouseUp"
class="slider-verify-container"
@mouseleave="onMouseLeave"
>
<span v-if="blockState === 0">請按住滑塊,拖動到最右邊</span>
<div
@mousedown="onMouseDown"
:style="{ left: leftP }"
class="slider-verify-block"
/>
<div :style="{ width: leftP }" class="slider-verify-complete">
<span v-if="blockState === 2">驗(yàn)證成功</span>
</div>
</div>
</template>
<script setup>
import { ref, defineEmits } from "vue";
const emit = defineEmits(["success", "failed"]);
const leftP = ref("0");
const blockState = ref(0);
const startP = ref(undefined);
const sliderContainer = ref(undefined);
const onMouseDown = (e) => {
if (blockState.value !== 2) {
leftP.value = "0";
blockState.value = 1;
startP.value = {
clientX: e.clientX,
};
} else {
leftP.value = "0";
blockState.value = 0;
}
};
const onMouseMove = (e) => {
if (blockState.value === 1) {
let width = e.clientX - startP.value.clientX;
if (width + 56 > 400) {
leftP.value = 400 - 56 + "px";
blockState.value = 2;
emit("success");
} else {
leftP.value = width + "px";
}
}
};
const onMouseUp = (e) => {
if (blockState.value !== 2) {
leftP.value = "0";
blockState.value = 0;
emit("failed");
}
};
const onMouseLeave = (e) => {
if (blockState.value !== 2) {
leftP.value = "0";
blockState.value = 0;
emit("failed");
}
};
</script>
<style lang="scss" scoped>
.slider-verify-container {
width: 100%;
height: 56px;
background-color: transparent;
position: relative;
border: solid 1px #20cccf;
text-align: center;
color: #20cccf;
line-height: 56px;
user-select: none;
-moz-user-select: none;
-ms-user-select: none;
-webkit-user-select: none;
}
.slider-verify-complete {
width: 0;
height: 56px;
position: absolute;
background-color: #00e6f14f;
left: 0;
top: 0;
}
.slider-verify-block {
width: 56px;
height: 56px;
background-image: url("@/assets/images/login6/arrow.png");
background-color: white;
position: absolute;
left: 0;
top: -1px;
border: solid 1px #20cccf;
background-size: 50%;
background-repeat: no-repeat;
background-position: center;
}
</style>2、調(diào)用代碼
<slide-verify @success="onVerifySuccess" @failed="onVerifyFailed" />
到此這篇關(guān)于Vue3滑動到最右驗(yàn)證功能的文章就介紹到這了,更多相關(guān)Vue3滑動到最右驗(yàn)證內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue2.x?el-table二次封裝實(shí)現(xiàn)編輯修改
本文主要介紹了vue2.x?el-table二次封裝實(shí)現(xiàn)編輯修改,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
在vue中實(shí)現(xiàn)禁止屏幕滾動,禁止屏幕滑動
這篇文章主要介紹了在vue中實(shí)現(xiàn)禁止屏幕滾動,禁止屏幕滑動,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07
使用Vue自定義指令實(shí)現(xiàn)Select組件
這篇文章主要介紹了使用Vue自定義指令實(shí)現(xiàn)Select組件,如果哪位朋友對vue自定義指令不是多了解的話,此篇文章會對你有所幫助的,需要的朋友可以參考下2018-05-05
在Vue中實(shí)現(xiàn)對文件的壓縮和解壓縮功能
在前端開發(fā)中,文件的壓縮和解壓縮是經(jīng)常需要用到的功能,尤其是在需要上傳和下載文件的場景下,文件壓縮可以減小文件大小,加快文件傳輸速度,提高用戶體驗(yàn),本文將介紹在Vue項(xiàng)目中如何進(jìn)行文件的壓縮和解壓縮,需要的朋友可以參考下2023-11-11
Vue elementUI 自定義表單模板組件功能實(shí)現(xiàn)
在項(xiàng)目開發(fā)中,我們會遇到這種需求,在管理后臺添加自定義表單,在指定的頁面使用定義好的表單,這篇文章主要介紹了Vue elementUI 自定義表單模板組件,需要的朋友可以參考下2022-12-12
antd Select下拉菜單動態(tài)添加option里的內(nèi)容操作
這篇文章主要介紹了antd Select下拉菜單動態(tài)添加option里的內(nèi)容操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11
vue項(xiàng)目中銷毀window.addEventListener事件監(jiān)聽解析
這篇文章主要介紹了vue項(xiàng)目中銷毀window.addEventListener事件監(jiān)聽,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
Vue el-table組件如何實(shí)現(xiàn)將日期格式化
這篇文章主要介紹了Vue el-table組件如何實(shí)現(xiàn)將日期格式化問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04
vue單向以及雙向數(shù)據(jù)綁定方式(v-bind和v-model的使用)
這篇文章主要介紹了vue單向以及雙向數(shù)據(jù)綁定方式(v-bind和v-model的使用),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04

