Vue實(shí)現(xiàn)滑動(dòng)驗(yàn)證功能
用Vue實(shí)現(xiàn)滑動(dòng)驗(yàn)證碼,鼠標(biāo)點(diǎn)擊滑動(dòng)驗(yàn)證,驗(yàn)證成功之后會顯示驗(yàn)證通過。
程序分析
1、鼠標(biāo)的點(diǎn)擊
2、滑塊的拖動(dòng)
3、未驗(yàn)證之前滑動(dòng)條上顯示的文字
4、滑塊箭頭指向Vue函數(shù)
5、判斷是否拖動(dòng)完畢
6、拖動(dòng)完畢時(shí)改變背景色并顯示驗(yàn)證成功
效果圖演示
原始狀態(tài)
點(diǎn)擊之后拖動(dòng)
拖動(dòng)完畢
有沒有感覺很奇妙的呢???
在欣賞代碼之前準(zhǔn)備工作要做好的?。?!
**特別注意:**相關(guān)架包的引入(三個(gè)架包)
<script src="js/vue.js"></script> <script src="https://unpkg.com/element-ui/lib/index.js"></script> <script src="js/jquery.js"></script>
代碼演示
<!DOCTYPE html> <html> ?? ?<head> ?? ??? ?<meta charset="UTF-8"> ?? ??? ?<title></title> ?? ??? ?<script src="js/vue.js"></script> ?? ??? ?<script src="https://unpkg.com/element-ui/lib/index.js"></script> ?? ??? ?<script src="js/jquery.js"></script> ?? ??? ?<style> ?? ??? ??? ?.big { ?? ??? ??? ??? ?border-radius:30px; ?? ??? ??? ??? ?position: relative; ?? ??? ??? ??? ?background-color: #75CDF9; ?? ??? ??? ??? ?width: 300px; ?? ??? ??? ??? ?height: 34px; ?? ??? ??? ??? ?margin-left: 30px; ?? ??? ??? ??? ?margin-top: 100px; ?? ??? ??? ??? ?line-height: 34px; ?? ??? ??? ??? ?text-align: center; ?? ??? ??? ?} ?? ??? ??? ? ?? ??? ??? ?.hand { ?? ??? ??? ??? ?border-radius:30px; ?? ??? ??? ??? ?position: absolute; ?? ??? ??? ??? ?top: 0px; ?? ??? ??? ??? ?left: 0px; ?? ??? ??? ??? ?width: 40px; ?? ??? ??? ??? ?height: 32px; ?? ??? ??? ??? ?border: 1px solid #ccc; ?? ??? ??? ??? ?cursor: move; ?? ??? ??? ?} ?? ??? ??? ? ?? ??? ??? ?.handler { ?? ??? ??? ??? ?background: #fff url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NTc3MiwgMjAxNC8wMS8xMy0xOTo0NDowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0ZDhlNWY5My05NmI0LTRlNWQtOGFjYi03ZTY4OGYyMTU2ZTYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTEyNTVEMURGMkVFMTFFNEI5NDBCMjQ2M0ExMDQ1OUYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTEyNTVEMUNGMkVFMTFFNEI5NDBCMjQ2M0ExMDQ1OUYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo2MTc5NzNmZS02OTQxLTQyOTYtYTIwNi02NDI2YTNkOWU5YmUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NGQ4ZTVmOTMtOTZiNC00ZTVkLThhY2ItN2U2ODhmMjE1NmU2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+YiRG4AAAALFJREFUeNpi/P//PwMlgImBQkA9A+bOnfsIiBOxKcInh+yCaCDuByoswaIOpxwjciACFegBqZ1AvBSIS5OTk/8TkmNEjwWgQiUgtQuIjwAxUF3yX3xyGIEIFLwHpKyAWB+I1xGSwxULIGf9A7mQkBwTlhBXAFLHgPgqEAcTkmNCU6AL9d8WII4HOvk3ITkWJAXWUMlOoGQHmsE45ViQ2KuBuASoYC4Wf+OUYxz6mQkgwAAN9mIrUReCXgAAAABJRU5ErkJggg==") no-repeat center; ?? ??? ??? ?} ?? ??? ??? ? ?? ??? ??? ?.handlerFinish { ?? ??? ??? ??? ?background: #fff url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NTc3MiwgMjAxNC8wMS8xMy0xOTo0NDowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0ZDhlNWY5My05NmI0LTRlNWQtOGFjYi03ZTY4OGYyMTU2ZTYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDlBRDI3NjVGMkQ2MTFFNEI5NDBCMjQ2M0ExMDQ1OUYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDlBRDI3NjRGMkQ2MTFFNEI5NDBCMjQ2M0ExMDQ1OUYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDphNWEzMWNhMC1hYmViLTQxNWEtYTEwZS04Y2U5NzRlN2Q4YTEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NGQ4ZTVmOTMtOTZiNC00ZTVkLThhY2ItN2U2ODhmMjE1NmU2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+k+sHwwAAASZJREFUeNpi/P//PwMyKD8uZw+kUoDYEYgloMIvgHg/EM/ptHx0EFk9I8wAoEZ+IDUPiIMY8IN1QJwENOgj3ACo5gNAbMBAHLgAxA4gQ5igAnNJ0MwAVTsX7IKyY7L2UNuJAf+AmAmJ78AEDTBiwGYg5gbifCSxFCZoaBMCy4A4GOjnH0D6DpK4IxNSVIHAfSDOAeLraJrjgJp/AwPbHMhejiQnwYRmUzNQ4VQgDQqXK0ia/0I17wJiPmQNTNBEAgMlQIWiQA2vgWw7QppBekGxsAjIiEUSBNnsBDWEAY9mEFgMMgBk00E0iZtA7AHEctDQ58MRuA6wlLgGFMoMpIG1QFeGwAIxGZo8GUhIysmwQGSAZgwHaEZhICIzOaBkJkqyM0CAAQDGx279Jf50AAAAAABJRU5ErkJggg==") no-repeat center; ?? ??? ??? ?} ?? ??? ??? ? ?? ??? ??? ?.bg { ?? ??? ??? ??? ?border-radius:30px; ?? ??? ??? ??? ?background-color: #13CE66; ?? ??? ??? ??? ?height: 34px; ?? ??? ??? ??? ?width: 0px; ?? ??? ??? ?} ?? ??? ??? ? ?? ??? ??? ?.text { ?? ??? ??? ??? ?position: absolute; ?? ??? ??? ??? ?top: 0px; ?? ??? ??? ??? ?width: 300px; ?? ??? ??? ??? ?-moz-user-select: none; ?? ??? ??? ??? ?-webkit-user-select: none; ?? ??? ??? ??? ?user-select: none; ?? ??? ??? ??? ?-o-user-select: none; ?? ??? ??? ??? ?-ms-user-select: none; ?? ??? ??? ?} ?? ??? ?</style> ?? ?</head> ?? ?<body> ?? ??? ?<div id="app"> ?? ??? ??? ?<div class="big" > ?? ??? ??? ??? ?<div class="bg"></div> ?? ??? ??? ??? ?<div class="text">{{confirmWords}}</div> ?? ??? ??? ??? ?<div @mousedown="mousedownFn($event)" class="hand handler"></div> ?? ??? ??? ?</div> ?? ??? ?</div> ?? ??? ? ?? ??? ? ?? ?</body> ?? ? ?? ?<script> ?? ??? ?var vm = new Vue({ ?? ? ?? ??? ??? ?el: "#app", ?? ??? ??? ?name: '', ?? ??? ??? ?components: {}, ?? ??? ??? ?props: {}, ?? ??? ??? ?data() { ?? ??? ??? ??? ?return { ?? ??? ??? ??? ??? ?beginClientX: 0, ?? ??? ??? ??? ??? ?mouseMoveStata: false, ?? ??? ??? ??? ??? ?maxwidth: 258, ?? ??? ??? ??? ??? ?confirmWords: '拖動(dòng)滑塊驗(yàn)證', ?? ??? ??? ??? ??? ?/*滑塊文字*/ ?? ??? ??? ??? ??? ?confirmSuccess: false, /*是否成功*/ ?? ??? ??? ??? ?} ?? ??? ??? ?}, ?? ??? ??? ?created() {}, ?? ??? ??? ?watch: { ?? ??? ??? ?}, ?? ??? ??? ?methods: { ?? ??? ??? ??? ?mousedownFn: function(e) { ?? ??? ??? ??? ??? ?this.mouseMoveStata = true; ?? ??? ??? ??? ??? ?this.beginClientX = e.clientX; ?? ??? ??? ??? ?},? ?? ??? ??? ??? ?//按下滑塊 ?? ??? ??? ??? ?successFunction() { ?? ??? ??? ??? ??? ?$(".hand").removeClass('handler').addClass('handlerFinish'); ?? ??? ??? ??? ??? ?this.confirmWords = '驗(yàn)證通過' ?? ??? ??? ??? ??? ?$(".big").css({ ?? ??? ??? ??? ??? ??? ?'color': '#fff' ?? ??? ??? ??? ??? ?}); ?? ??? ??? ??? ??? ?$(".big").css({ ?? ??? ??? ??? ??? ??? ?'background-color': '#13CE66' ?? ??? ??? ??? ??? ?}); ?? ??? ??? ??? ??? ?$(".hand").css({ ?? ??? ??? ??? ??? ??? ?'left': this.maxwidth ?? ??? ??? ??? ??? ?}); ?? ??? ??? ??? ??? ?$(".bg").css({ ?? ??? ??? ??? ??? ??? ?'width': this.maxwidth ?? ??? ??? ??? ??? ?}); ?? ??? ??? ??? ??? ?$('body').unbind('mousemove'); ?? ??? ??? ??? ??? ?$('body').unbind('mouseup'); ?? ??? ??? ??? ??? ?this.confirmSuccess = true; ?? ??? ??? ??? ??? ? ?? ??? ??? ??? ?} //判斷是否成功 ?? ??? ??? ?}, ?? ??? ??? ?mounted() { ?? ??? ??? ??? ?$('body').on('mousemove', (e) => { ?? ??? ??? ??? ??? ?//拖動(dòng)使用箭頭指向Vue函數(shù) ?? ??? ??? ??? ??? ?if(this.mouseMoveStata) { ?? ??? ??? ??? ??? ??? ?var width = e.clientX - this.beginClientX; ?? ??? ??? ??? ??? ??? ?if(width > 0 && width <= this.maxwidth) { ?? ??? ??? ??? ??? ??? ??? ?$(".hand").css({ ?? ??? ??? ??? ??? ??? ??? ??? ?'left': width ?? ??? ??? ??? ??? ??? ??? ?}); ?? ??? ??? ??? ??? ??? ??? ?$(".bg").css({ ?? ??? ??? ??? ??? ??? ??? ??? ?'width': width ?? ??? ??? ??? ??? ??? ??? ?}); ?? ??? ??? ??? ??? ??? ?} else if(width > this.maxwidth) { ?? ??? ??? ??? ??? ??? ??? ?this.successFunction(); ?? ??? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?}); ?? ??? ??? ??? ?$('body').on('mouseup', (e) => { ?? ??? ??? ??? ??? ?//鼠標(biāo)放開? ?? ??? ??? ??? ??? ?this.mouseMoveStata = false; ?? ??? ??? ??? ??? ?var width = e.clientX - this.beginClientX; ?? ??? ??? ??? ??? ?if(width < this.maxwidth) { ?? ??? ??? ??? ??? ??? ?$(".hand").css({ ?? ??? ??? ??? ??? ??? ??? ?'left': 0 ?? ??? ??? ??? ??? ??? ?}); ?? ??? ??? ??? ??? ??? ?$(".bg").css({ ?? ??? ??? ??? ??? ??? ??? ?'width': 0 ?? ??? ??? ??? ??? ??? ?}); ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?}) ?? ??? ??? ?} ?? ??? ?}); ?? ?</script> </html>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- vue實(shí)現(xiàn)圖片滑動(dòng)驗(yàn)證功能
- vue自定義開發(fā)滑動(dòng)圖片驗(yàn)證組件
- vue實(shí)現(xiàn)登錄滑動(dòng)拼圖驗(yàn)證
- vue實(shí)現(xiàn)圖片滑動(dòng)驗(yàn)證
- vue實(shí)現(xiàn)滑動(dòng)驗(yàn)證條
- Vue實(shí)現(xiàn)滑動(dòng)拼圖驗(yàn)證碼功能
- 使用Vue 實(shí)現(xiàn)滑動(dòng)驗(yàn)證碼功能
- vue 登錄滑動(dòng)驗(yàn)證實(shí)現(xiàn)代碼
- Vue.js圖片滑動(dòng)驗(yàn)證的實(shí)現(xiàn)示例
相關(guān)文章
vue中 數(shù)字相加為字串轉(zhuǎn)化為數(shù)值的例子
今天小編就為大家分享一篇vue中 數(shù)字相加為字串轉(zhuǎn)化為數(shù)值的例子,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11vue?mounted周期中document.querySelectorAll()獲取不到元素的解決
這篇文章主要介紹了vue?mounted周期中document.querySelectorAll()獲取不到元素的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03詳解Vue 普通對象數(shù)據(jù)更新與 file 對象數(shù)據(jù)更新
本篇文章主要介紹了詳解Vue 普通對象數(shù)據(jù)更新與 file 對象數(shù)據(jù)更新 ,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-04-04nuxt.js寫項(xiàng)目時(shí)增加錯(cuò)誤提示頁面操作
這篇文章主要介紹了nuxt.js寫項(xiàng)目時(shí)增加錯(cuò)誤提示頁面操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11關(guān)于Vue源碼vm.$watch()內(nèi)部原理詳解
這篇文章主要介紹了關(guān)于Vue源碼vm.$watch()內(nèi)部原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04Vue環(huán)境搭建+VSCode+Win10的詳細(xì)教程
這篇文章主要介紹了Vue環(huán)境搭建+VSCode+Win10,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08Vue 解決通過this.$refs來獲取DOM或者組件報(bào)錯(cuò)問題
這篇文章主要介紹了Vue 解決通過this.$refs來獲取DOM或者組件報(bào)錯(cuò)問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07