电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

vue實現一個6個輸入框的驗證碼輸入組件功能的實例代碼

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

vue實現一個6個輸入框的驗證碼輸入組件功能的實例代碼

要實現的功能:

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

1,限制輸入數字

2,正常輸入

3,backspace刪除

4,paste任意位置粘貼輸入

5,光標選中一個數字,滾輪可以微調數字大小,限制0-9

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

7,封裝成vue單文件組件,方便任意調用。

模板代碼

<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>

實現了鍵盤的keydown/keyup/paste/input和鼠標滾輪mousewheel事件

使用了6個輸入框的方案來實現。

樣式部分:使用了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>

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

<script> export default { data() { return {// 存放粘貼進來的數字pasteResult: [], }; }, props: [’code’], computed: { input() {// code 是父組件傳進來的默認值,必須是6位長度的數組,這里就不再做容錯判斷處理// 最后空數組是默認值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渲染完成,在執行focus,否則無法獲取到焦點 this.$nextTick(() => {this.$refs.firstinput.focus() }) }, }</script>

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

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

標簽: Vue
相關文章:
主站蜘蛛池模板: 微波消解仪器_智能微波消解仪报价_高压微波消解仪厂家_那艾 | 闪电优家-卫生间防水补漏_酒店漏水渗水维修_防水堵漏公司 | PCB厂|线路板厂|深圳线路板厂|软硬结合板厂|电路板生产厂家|线路板|深圳电路板厂家|铝基板厂家|深联电路-专业生产PCB研发制造 | 搜活动房网—活动房_集装箱活动房_集成房屋_活动房屋 | 广州工业氧气-工业氩气-工业氮气-二氧化碳-广州市番禺区得力气体经营部 | 动力配电箱-不锈钢配电箱-高压开关柜-重庆宇轩机电设备有限公司 聚天冬氨酸,亚氨基二琥珀酸四钠,PASP,IDS - 远联化工 | 无硅导热垫片-碳纤维导热垫片-导热相变材料厂家-东莞市盛元新材料科技有限公司 | 上海赞永| 拉力测试机|材料拉伸试验机|电子拉力机价格|万能试验机厂家|苏州皖仪实验仪器有限公司 | 防爆暖风机_防爆电暖器_防爆电暖风机_防爆电热油汀_南阳市中通智能科技集团有限公司 | 萃取箱-萃取槽-PVC萃取箱厂家-混合澄清槽- 杭州南方化工设备 | 冲锋衣滑雪服厂家-冲锋衣定制工厂-滑雪服加工厂-广东睿牛户外(S-GERT) | 臭氧老化试验箱,高低温试验箱,恒温恒湿试验箱,防水试验设备-苏州亚诺天下仪器有限公司 | 北京森语科技有限公司-模型制作专家-展览展示-沙盘模型设计制作-多媒体模型软硬件开发-三维地理信息交互沙盘 | 航空连接器,航空插头,航空插座,航空接插件,航插_深圳鸿万科 | 洁净棚-洁净工作棚-无菌室-净化工程公司_北京卫护科技有限公司 | 防火门|抗爆门|超大门|医疗门|隔声门-上海加汇门业生产厂家 | 电镀整流器_微弧氧化电源_高频电解电源_微弧氧化设备厂家_深圳开瑞节能 | Akribis直线电机_直线模组_力矩电机_直线电机平台|雅科贝思Akribis-杭州摩森机电科技有限公司 | 二手色谱仪器,十万分之一分析天平,蒸发光检测器,电位滴定仪-湖北捷岛科学仪器有限公司 | 岩棉板|岩棉复合板|聚氨酯夹芯板|岩棉夹芯板|彩钢夹芯板-江苏恒海钢结构 | 石膏基自流平砂浆厂家-高强石膏基保温隔声自流平-轻质抹灰石膏粉砂浆批发-永康市汇利建设有限公司 | 安徽免检低氮锅炉_合肥燃油锅炉_安徽蒸汽发生器_合肥燃气锅炉-合肥扬诺锅炉有限公司 | 房在线-免费房产管理系统软件-二手房中介房屋房源管理系统软件 | 细砂提取机,隔膜板框泥浆污泥压滤机,螺旋洗砂机设备,轮式洗砂机械,机制砂,圆锥颚式反击式破碎机,振动筛,滚筒筛,喂料机- 上海重睿环保设备有限公司 | 中高频感应加热设备|高频淬火设备|超音频感应加热电源|不锈钢管光亮退火机|真空管烤消设备 - 郑州蓝硕工业炉设备有限公司 | TTCMS自助建站_网站建设_自助建站_免费网站_免费建站_天天向上旗下品牌 | 螺钉式热电偶_便携式温度传感器_压簧式热电偶|无锡联泰仪表有限公司|首页 | 艺术生文化课培训|艺术生文化课辅导冲刺-济南启迪学校 | 深圳美安可自动化设备有限公司,喷码机,定制喷码机,二维码喷码机,深圳喷码机,纸箱喷码机,东莞喷码机 UV喷码机,日期喷码机,鸡蛋喷码机,管芯喷码机,管内壁喷码机,喷码机厂家 | PCB厂|线路板厂|深圳线路板厂|软硬结合板厂|电路板生产厂家|线路板|深圳电路板厂家|铝基板厂家|深联电路-专业生产PCB研发制造 | 过滤器_自清洗过滤器_气体过滤器_苏州华凯过滤技术有限公司 | LCD3D打印机|教育|桌面|光固化|FDM3D打印机|3D打印设备-广州造维科技有限公司 | 首页_中夏易经起名网| 重庆钣金加工厂家首页-专业定做监控电视墙_操作台 | 合肥花魁情感婚姻咨询中心_挽回爱情_修复婚姻_恋爱指南 | SDG吸附剂,SDG酸气吸附剂,干式酸性气体吸收剂生产厂家,超过20年生产使用经验。 - 富莱尔环保设备公司(原名天津市武清县环保设备厂) | 纸箱抗压机,拉力机,脂肪测定仪,定氮仪-山东德瑞克仪器有限公司 | 散热器-电子散热器-型材散热器-电源散热片-镇江新区宏图电子散热片厂家 | 搅拌磨|搅拌球磨机|循环磨|循环球磨机-无锡市少宏粉体科技有限公司 | 厂房出售_厂房仓库出租_写字楼招租_土地出售-中苣招商网-中苣招商网 |