vue?實(shí)現(xiàn)滑動(dòng)塊解鎖示例詳解
引言
從0開(kāi)始,寫(xiě)一個(gè)登錄滑動(dòng)解鎖的功能。
首先,新創(chuàng)建一個(gè) vue 項(xiàng)目。 或者在已有的項(xiàng)目寫(xiě)也可以。 將無(wú)用的代碼刪一下。
下載需要用到的組件庫(kù)
1、下載 element-ui。
yarn add element-ui -S or npm i element-ui -S
2、 在main.js 中引入。
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
+ import ElementUI from 'element-ui'
+ import 'element-ui/lib/theme-chalk/index.css'
Vue.config.productionTip = false
+ Vue.use(ElementUI)
new Vue({
router,
store,
+ el: '#app',
render: h => h(App)
}).$mount('#app')
3、測(cè)試是否下載成功。
<template>
<div class="about">
+ <el-button type="primary">主要按鈕</el-button>
<h1>This is an about page</h1>
</div>
</template>
書(shū)寫(xiě)登錄頁(yè)面
頁(yè)面可以正常展示按鈕,說(shuō)明下載成功??梢蚤_(kāi)始寫(xiě)代碼了。

寫(xiě)一個(gè)簡(jiǎn)單的登錄頁(yè)面。
Login.vue
template 結(jié)構(gòu):
<template>
<div class="login-container">
<div class="login-header">
<h1>xxx系統(tǒng)</h1>
</div>
<div class="login-body">
<div class="login-form-container">
<el-form
ref="loginFormRef"
class="form-style"
:label-position="`right`"
:model="loginFormData"
status-icon
>
<el-form-item
name="username"
prop="username"
>
<el-input
v-model="loginFormData.username"
placeholder="請(qǐng)輸入用戶名"
prefix-icon="el-icon-user"
clearable
/>
</el-form-item>
<el-form-item
class="el-item-style"
name="password"
prop="password"
>
<!-- 密碼框 -->
<el-input
prefix-icon="el-icon-lock"
v-model="loginFormData.password"
:type="`${hasOpenEye? 'text':'password'}`"
placeholder="請(qǐng)輸入密碼">
<i
slot="suffix"
:class="[hasOpenEye ? 'el-icon-unlock' : 'el-icon-lock']"
style="font-size: 14px; cursor: pointer"
@click="hasOpenEye = !hasOpenEye"/>
</el-input>
</el-form-item>
<el-form-item class="el-item-style">
<el-button
:loading="false"
style="
width: 100%;
height: 46px;
line-height: 15px;
font-size: 23px;
"
type="primary"
@click="login"
>登錄</el-button>
</el-form-item>
</el-form>
</div>
</div>
</div>
</template>
script 邏輯:
<script>
export default {
// 登錄表單數(shù)據(jù)
data () {
return {
loginFormData: {
username: "123232",
password: "21232"
},
hasOpenEye : false, // 是否顯示密碼
}
},
components: {},
methods: {
login () {},
},
}
</script>
style 樣式:
<style lang="less" scoped>
.login-container {
position: relative;
height: 100%;
width: 100%;
display: flex;
user-select: none;
flex-direction: column;
.login-header {
display: flex;
align-items: center;
padding-left: 50px;
cursor: pointer;
}
.login-footer {
display: flex;
justify-content: center;
align-items: center;
color: #322b34;
font-size: 12px;
}
.login-header,
.login-footer {
height: 10%;
}
.login-body {
background-position: center center;
background-repeat: no-repeat;
background-size: 100% auto;
flex: 1 1;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
user-select: none;
.login-form-container {
width: 30%;
border: 1px solid mix(pink, #000, 80);
box-shadow: 0 0.5em 1em rgba(0, 0, 0, 0.3);
background: linear-gradient(
to bottom,
rgba(255, 255, 255, 0.3),
rgba(0, 0, 0, 0.3)
);
padding: 20px 30px;
border-radius: 5px;
}
}
}
</style>
登錄頁(yè)面效果展示:

寫(xiě)滑動(dòng)解鎖組件
1、下載安裝包:
vue-monoplasty-slide-verify
2、導(dǎo)入到 main.js 中
import SlideVerify from 'vue-monoplasty-slide-verify'; Vue.use(SlideVerify);
3、新建一個(gè)文件component / verify.vue
template 模板:
<template>
<div>
<!-- title="滑塊驗(yàn)證碼" -->
<el-dialog
:visible.sync="dialogVisible"
:before-close="dialogBeforeClose"
:close-on-click-modal="false"
>
<div class="flex">
<slide-verify
ref="slideblock"
:w="fullWidth"
:h="fullHeight"
:accuracy="accuracy"
:slider-text="text"
:imgs="imgList"
@again="onAgain"
@fulfilled="onFulfilled"
@success="onSuccess"
@fail="onFail"
@refresh="onRefresh"
/>
</div>
</el-dialog>
</div>
</template>
script 代碼:
<script>
export default {
name: 'verify',
data() {
return {
dialogVisible: false,
fullWidth: 450,
fullHeight: 304,
msg: '',
text: '請(qǐng)向右滑動(dòng)滑塊完成驗(yàn)證',
// 精確度小,可允許的誤差范圍??;為1時(shí),則表示滑塊要與凹槽完全重疊,才能驗(yàn)證成功。默認(rèn)值為5
accuracy: 3,
imgList: [
// 圖片的路徑:
require('../assets/3.jpg')
]
}
},
mounted() {},
methods: {
dialogBeforeClose() {
this.dialogVisible = false
},
onSuccess() {
console.log('驗(yàn)證通過(guò)')
this.msg = 'login success'
this.dialogVisible = false
this.$emit('verifySuccess')
this.$message.success("驗(yàn)證成功")
this.$router.push('/a')
},
onFail() {
console.log('驗(yàn)證不通過(guò)')
this.msg = '驗(yàn)證不通過(guò)'
this.$message.error('驗(yàn)證失敗')
},
onRefresh() {
console.log('點(diǎn)擊了刷新小圖標(biāo)')
this.msg = ''
},
onFulfilled() {
console.log('刷新成功啦!')
},
onAgain() {
console.log('檢測(cè)到非人為操作的哦!')
this.msg = 'try again'
// 刷新
this.$refs.slideblock.reset()
},
handleClick() {
// 父組件直接可以調(diào)用刷新方法
this.$refs.slideblock.reset()
console.log(23333);
}
}
}
</script>
style 樣式:
<style lang="less" scoped>
.flex{
display: flex;
align-items: center;
justify-content: center;
}
/deep/ .el-dialog {
width: 500px;
border-radius: 16px;
margin: auto;
}
/deep/ .el-dialog__header {
display: none;
}
/deep/ .slide-verify-slider {
border-radius: 33px;
}
/deep/ .slide-verify-slider-mask {
border-radius: 33px 0 0 33px;
}
</style>
將滑動(dòng)組件運(yùn)用到我們的 Login 組件中:
import verify from "../components/verify.vue";
export default {
components: {
verify
},
}
<template> <el-form> ...... </el-form> + <verify ref="verify"></verify> </template>
補(bǔ)充邏輯代碼
login () {
this.$refs.verify.dialogVisible = true
},
最終效果:

完成。
以上就是vue 實(shí)現(xiàn)滑動(dòng)塊解鎖示例詳解的詳細(xì)內(nèi)容,更多關(guān)于vue 滑動(dòng)塊解鎖的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
import.meta.glob() 如何導(dǎo)入多個(gè)目錄下的資源(最新推薦)
import.meta.glob() 其實(shí)不僅能接收一個(gè)字符串,還可以接收一個(gè)字符串?dāng)?shù)組,就是匹配多個(gè)位置,本文給大家介紹import.meta.glob() 如何導(dǎo)入多個(gè)目錄下的資源,感興趣的朋友一起看看吧2023-11-11
elementui時(shí)間/日期選擇器選擇禁用當(dāng)前之前(之后)時(shí)間代碼實(shí)例
當(dāng)我們?cè)谶M(jìn)行網(wǎng)頁(yè)開(kāi)發(fā)時(shí),通常需要用到一些日期組件來(lái)方便用戶選擇時(shí)間,其中element日期組件是一個(gè)非常好用的工具,這篇文章主要給大家介紹了關(guān)于elementui時(shí)間/日期選擇器選擇禁用當(dāng)前之前(之后)時(shí)間的相關(guān)資料,需要的朋友可以參考下2024-02-02
Vue之解決Echarts組件使用ID不能復(fù)用的問(wèn)題
這篇文章主要介紹了Vue之解決Echarts組件使用ID不能復(fù)用的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
vue實(shí)踐---根據(jù)不同環(huán)境,自動(dòng)轉(zhuǎn)換請(qǐng)求的url地址操作
這篇文章主要介紹了vue實(shí)踐---根據(jù)不同環(huán)境,自動(dòng)轉(zhuǎn)換請(qǐng)求的url地址操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09
vue3+vite:src使用require動(dòng)態(tài)導(dǎo)入圖片報(bào)錯(cuò)的最新解決方法
這篇文章主要介紹了vue3+vite:src使用require動(dòng)態(tài)導(dǎo)入圖片報(bào)錯(cuò)和解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04
vue項(xiàng)目中如何調(diào)用多個(gè)不同的ip接口
這篇文章主要介紹了vue項(xiàng)目中如何調(diào)用多個(gè)不同的ip接口,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
對(duì)vue事件的延遲執(zhí)行實(shí)例講解
今天小編就為大家分享一篇對(duì)vue事件的延遲執(zhí)行實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08

