日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

vue實現(xiàn)一個6個輸入框的驗證碼輸入組件功能的實例代碼

瀏覽:169日期:2023-01-11 08:52:27

vue實現(xiàn)一個6個輸入框的驗證碼輸入組件功能的實例代碼

要實現(xiàn)的功能:

完全和單輸入框一樣的操作,甚至可以插入覆蓋:

1,限制輸入數(shù)字

2,正常輸入

3,backspace刪除

4,paste任意位置粘貼輸入

5,光標選中一個數(shù)字,滾輪可以微調(diào)數(shù)字大小,限制0-9

6,123|456 自動覆蓋光標后輸入的字符,此時光標在3后,繼續(xù)輸入111,會得到123111,而不用手動刪除456

7,封裝成vue單文件組件,方便任意調(diào)用。

模板代碼

<template> <div class='input-box'> <div @keydown='keydown' @keyup='keyup' @paste='paste' @mousewheel='mousewheel'@input='inputEvent'> <input max='9' min='0' maxlength='1' data-index='0' v-model.trim.number='input[0]' type='number' ref='firstinput'/> <input max='9' min='0' maxlength='1' data-index='1' v-model.trim.number='input[1]' type='number'/> <input max='9' min='0' maxlength='1' data-index='2' v-model.trim.number='input[2]' type='number'/> <input <input max='9' min='0' maxlength='1' data-index='4' v-model.trim.number='input[4]' type='number'/> <input max='9' min='0' maxlength='1' data-index='5' v-model.trim.number='input[5]' type='number'/> </div> </div></template>

實現(xiàn)了鍵盤的keydown/keyup/paste/input和鼠標滾輪mousewheel事件

使用了6個輸入框的方案來實現(xiàn)。

樣式部分:使用了scss模式

<style scoped lang='scss'> .input-box { .input-content { width: 512px; height: 60px; display: flex; align-items: center; justify-content: space-between; input {color: inherit;font-family: inherit;border: 0;outline: 0;border-bottom: 1px solid #919191;height: 60px;width: 60px;font-size: 44px;text-align: center; } }input::-webkit-outer-spin-button, input::-webkit-inner-spin-button { appearance: none; margin: 0; } }</style>

具體實現(xiàn)邏輯:主要實現(xiàn)以上幾個鍵盤事件操作。

<script> export default { data() { return {// 存放粘貼進來的數(shù)字pasteResult: [], }; }, props: [’code’], computed: { input() {// code 是父組件傳進來的默認值,必須是6位長度的數(shù)組,這里就不再做容錯判斷處理// 最后空數(shù)組是默認值return this.code || this.pasteResult.length === 6 ? this.pasteResult : [’’, ’’, ’’, ’’, ’’, ’’] } }, methods: { // 解決一個輸入框輸入多個字符 inputEvent(e) {var index = e.target.dataset.index * 1;var el = e.target;this.$set(this.input, index, el.value.slice(0, 1)) }, keydown(e) {var index = e.target.dataset.index * 1;var el = e.target;if (e.key === ’Backspace’) { if (this.input[index].length > 0) { this.$set(this.input, index, ’’) } else { if (el.previousElementSibling) { el.previousElementSibling.focus() this.$set(this.input, index - 1, ’’) } }} else if (e.key === ’Delete’) { if (this.input[index].length > 0) { this.$set(this.input, index, ’’) } else { if (el.nextElementSibling) { this.$set(this.input, index = 1, ’’) } } if (el.nextElementSibling) { el.nextElementSibling.focus() }} else if (e.key === ’Home’) { el.parentElement.children[0] && el.parentElement.children[0].focus()} else if (e.key === ’End’) { el.parentElement.children[this.input.length - 1] && el.parentElement.children[this.input.length - 1].focus()} else if (e.key === ’ArrowLeft’) { if (el.previousElementSibling) { el.previousElementSibling.focus() }} else if (e.key === ’ArrowRight’) { if (el.nextElementSibling) { el.nextElementSibling.focus() }} else if (e.key === ’ArrowUp’) { if (this.input[index] * 1 < 9) { this.$set(this.input, index, (this.input[index] * 1 + 1).toString()); }} else if (e.key === ’ArrowDown’) { if (this.input[index] * 1 > 0) { this.$set(this.input, index, (this.input[index] * 1 - 1).toString()); }} }, keyup(e) {var index = e.target.dataset.index * 1;var el = e.target;if (/Digit|Numpad/i.test(e.code)) { this.$set(this.input, index, e.code.replace(/Digit|Numpad/i, ’’)); el.nextElementSibling && el.nextElementSibling.focus(); if (index === 5) { if (this.input.join(’’).length === 6) { document.activeElement.blur(); this.$emit(’complete’, this.input); } }} else { if (this.input[index] === ’’) { this.$set(this.input, index, ’’); }} }, mousewheel(e) {var index = e.target.dataset.index;if (e.wheelDelta > 0) { if (this.input[index] * 1 < 9) { this.$set(this.input, index, (this.input[index] * 1 + 1).toString()); }} else if (e.wheelDelta < 0) { if (this.input[index] * 1 > 0) { this.$set(this.input, index, (this.input[index] * 1 - 1).toString()); }} else if (e.key === ’Enter’) { if (this.input.join(’’).length === 6) { document.activeElement.blur(); this.$emit(’complete’, this.input); }} }, paste(e) {// 當進行粘貼時e.clipboardData.items[0].getAsString(str => { if (str.toString().length === 6) { this.pasteResult = str.split(’’); document.activeElement.blur(); this.$emit(’complete’, this.input); }}) } }, mounted() { // 等待dom渲染完成,在執(zhí)行focus,否則無法獲取到焦點 this.$nextTick(() => {this.$refs.firstinput.focus() }) }, }</script>

如果你發(fā)現(xiàn)了bug,或者有優(yōu)化空間,歡迎你的指正和建議。我會隨時更新到原代碼當中,分享給大家。

到此這篇關于vue實現(xiàn)一個6個輸入框的驗證碼輸入組件的文章就介紹到這了,更多相關vue實現(xiàn)輸入框的驗證碼輸入組件內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品久久久久久久久妇女| 色爱综合网欧美| 国产精品777777在线播放| 蘑菇福利视频一区播放| 99久久婷婷| 亚洲激情中文在线| 免费看的黄色欧美网站| 在线一区二区三区视频| 亚洲欧洲专区| 97久久亚洲| 另类欧美日韩国产在线| 国产一区二区三区久久久久久久久| 荡女精品导航| 日韩免费在线| 激情欧美一区二区三区| 亚洲欧洲一区| 亚洲免费资源| 色狠狠一区二区三区| 91精品一区| 欧美激情aⅴ一区二区三区| 色婷婷色综合| 婷婷综合网站| 亚洲精品美女91| 国产精品毛片aⅴ一区二区三区| 九九久久国产| 成人日韩精品| 美女日韩在线中文字幕| 天堂精品久久久久| 国产精品久av福利在线观看| 国产精品福利在线观看播放| 久久久夜夜夜| 中文字幕一区二区三区四区久久| 奇米色欧美一区二区三区| 欧美精品二区| 91精品蜜臀一区二区三区在线| 欧美专区18| 国产精品一卡| 人人精品亚洲| 亚洲精品第一| 精品一区不卡| 一区在线视频观看| 欧美天堂在线| 日韩精品一区二区三区免费观影 | 亚洲综合电影| 91久久久久| 国产精品白丝av嫩草影院| 精品日韩视频| 日本不卡视频在线| 美女福利一区二区三区| 丝袜国产日韩另类美女| 久久婷婷国产| 午夜在线精品| 精品高清久久| 蜜桃av一区二区在线观看| 国产精品成人自拍| 精品欧美久久| 国产精品一国产精品| 91精品xxx在线观看| 中文精品电影| 吉吉日韩欧美| 日韩一区二区三区精品视频第3页 日韩一区二区三区免费视频 | 亚洲黄色网址| 日韩精品三区四区| 天堂日韩电影| 国产精品国码视频| 亚洲综合二区| 国产91在线精品| 日韩美女精品| 国产在线成人| 精品久久不卡| 免播放器亚洲| 欧美成人基地| 麻豆91精品视频| 日韩在线观看一区二区| 欧美日韩视频网站| 国产精品高清一区二区| 免费看黄色91| 今天的高清视频免费播放成人| 久久av影院| 日本不卡视频一二三区| 欧美va天堂在线| 精品国产亚洲日本| 日韩 欧美一区二区三区| 欧洲激情综合| 岛国av在线网站| 日本视频在线一区| 中文亚洲欧美| 日韩欧美少妇| 精品国产亚洲一区二区三区| 日本亚洲视频在线| 国产免费成人| 激情婷婷综合| 99热精品久久| 日韩一区二区在线免费| 欧美激情视频一区二区三区免费| 日韩精品1区2区3区| 久久国产精品久久w女人spa| 激情综合激情| 成人午夜精品| 国产粉嫩在线观看| 国产精品任我爽爆在线播放| 亚洲精品极品| 视频一区中文字幕精品| 免播放器亚洲一区| 亚洲高清毛片| 四虎4545www国产精品| 精品淫伦v久久水蜜桃| 欧美亚洲三区| 日韩国产一二三区| 五月激激激综合网色播| 亚洲精品视频一二三区| 在线精品国产亚洲| 欧美一区=区| 蜜桃视频在线观看一区| 亚洲资源在线| 蜜臀久久久久久久| 亚洲字幕久久| 日本一区二区三区中文字幕| 亚洲精品综合| 日韩精品一区二区三区中文| 在线免费观看亚洲| 亚洲v天堂v手机在线| 日韩一二三区在线观看| 日韩高清不卡在线| 国产午夜一区| 欧美激情日韩| 精品一区二区三区在线观看视频| 精品亚洲精品| 亚洲午夜天堂| 国产一区久久| 一区二区亚洲精品| 亚洲在线成人| 蜜桃视频第一区免费观看| 日韩中文一区二区| 国产精品久久久久久久久久白浆 | 日韩黄色大片| 另类中文字幕国产精品| 欧美jjzz| 尹人成人综合网| 亚洲欧美日韩一区在线观看| 亚洲一级大片| 国产精品久久| 精品视频在线你懂得| 亚洲天堂免费电影| 国产一区日韩一区| 亚洲专区视频| 国产精品一区二区三区av| 国产一区二区三区日韩精品| 日韩精品一卡| 亚洲伊人精品酒店| 国产精品中文| 国产粉嫩在线观看| 91国语精品自产拍| 视频在线观看一区| 国产欧美一区二区色老头| 免费一区二区三区在线视频| av综合电影网站| 国产精品色网| 国产欧美精品久久| 国产h片在线观看| 欧美99久久| 欧美一区激情| 亚洲黄色网址| 视频一区二区三区中文字幕| 国产剧情一区| 国内亚洲精品| 91成人精品观看| 色婷婷狠狠五月综合天色拍| 在线精品小视频| 国产精区一区二区| 亚州av乱码久久精品蜜桃| 国产日本久久| 久久精品中文| 日韩三级精品| 精品视频网站| 午夜亚洲一区| 国产一区二区三区四区| 三级欧美在线一区| 国产aⅴ精品一区二区四区| 免费日韩一区二区| 给我免费播放日韩视频| 美女黄网久久| 久久久久久色| 电影91久久久| 免费视频一区二区| 人在线成免费视频| **爰片久久毛片| 激情综合网站| 精品一级视频| 日韩综合一区二区| 欧美影院三区| 牛牛精品成人免费视频| 制服诱惑一区二区| 精品九九久久| 亚洲91在线| 91精品成人| 精品视频在线你懂得| 综合一区二区三区| 亚洲永久av| 国产精品亚洲综合在线观看|