JS/JQ实现小程序/H5验证码页面

话不多说,先上效果图

核心代码

1、html/css关键代码

html 复制代码
<div class="obtain-verification-code">
    <div class="obtain-verification-code-input-content">
        <input id="input-0" class="verification-code-input" max="9" min="0" maxlength="1" data-index="0" type="number" />
        <input id="input-1" class="verification-code-input" max="9" min="0" maxlength="1" data-index="1" type="number" />
        <input id="input-2" class="verification-code-input" max="9" min="0" maxlength="1" data-index="2" type="number" />
        <input id="input-3" class="verification-code-input" max="9" min="0" maxlength="1" data-index="3" type="number" />
        <input id="input-4" class="verification-code-input" max="9" min="0" maxlength="1" data-index="4" type="number" />
        <input id="input-5" class="verification-code-input" max="9" min="0" maxlength="1" data-index="5" type="number" />
    </div>
</div>

<style lang="less">
.obtain-verification-code {
    margin-top: 20px;
    .obtain-verification-code-input-content {
        box-sizing: border-box;
	    padding-left: 10px;
		padding-right: 10px;
		width: 100%;
		height: 40px;
		display: flex;
		align-items: center;
		justify-content: space-between;
		input {
			background: #f8f8f8;
			color: #111111;
			font-family: inherit;
			font-weight: bold;
			border: 0;
			outline: 0;
			height: 40px;
			width: 40px;
			font-size: 20px;
			text-align: center;
			border-radius: 4px;
		}
    }
    input::-webkit-outer-spin-button,
	input::-webkit-inner-spin-button {
		appearance: none;
		margin: 0;
	}
}
</style>

2、js关键代码

javascript 复制代码
autoSubmodify(code) {
	let strCode = ''
	if(!code) {
		let val = $("#input-0").val() || ''
		let val1 = $("#input-1").val() || ''
		let val2 = $("#input-2").val() || ''
		let val3 = $("#input-3").val() || ''
		let val4 = $("#input-4").val() || ''
		let val5 = $("#input-5").val() || ''
		strCode = '' + val + val1 + val2 + val3 + val4 + val5
	}
    // 提交操作
	// ...
},

keydown(e) {
      var index = e.target.dataset.index * 1;
      var el = e.target;
			var ref = `#input-${index}`
      if (e.key === 'Backspace') {
				console.log($(ref).val())
        if ($(ref).val() !== '' && $(ref).val() !== undefined) {
          $(ref).val('')
        } else {
          if (el.previousElementSibling) {
            el.previousElementSibling.focus()
						var preRef = `#input-${index - 1}`
            $(preRef).val('')
          }
        }
      } else if (e.key === 'Delete') {
        if (($(ref).val()).length > 0) {
          $(ref).val('')
        } else {
          if (el.nextElementSibling) {
            $("#input-1").val('')
          }
        }
        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[5] && el.parentElement.children[5].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 ($(ref).val() * 1 < 9) {
					let newVal = ($(ref).val() * 1 + 1).toString()
					$(ref).val(newVal)
        }
      } else if (e.key === 'ArrowDown') {
        if ($(ref).val() * 1 > 0) {
					let newVal = ($(ref).val() * 1 - 1).toString()
					$(ref).val(newVal)
        }
      } else if (e.key === 'Enter') {
        // 确认
				this.autoSubmodify()
      }
    },

keyup(e) {
      var index = e.target.dataset.index * 1;
      var el = e.target;
			var ref = `#input-${index}`
      if (e.code !== 'NumpadEnter' && e.code !== 'Enter' && parseFloat(e.target.value).toString() != "NaN") {
        el.nextElementSibling && el.nextElementSibling.focus();
        if (index === 5) {
					let val = $("#input-0").val()
					let val1 = $("#input-1").val()
					let val2 = $("#input-2").val()
					let val3 = $("#input-3").val()
					let val4 = $("#input-4").val()
					let val5 = $("#input-5").val()
          if (val && val1 && val2 && val3 && val4 && val5) {
						let code = '' + val + val1 + val2 + val3 + val4 + val5
						this.autoSubmodify(code)
          }
        }
      } else {
        if ($(ref).val() === '') {
          $(ref).val('')
        }
      }
    },

mousewheel(e) {
      var index = e.target.dataset.index;
			var ref = `#input-${index}`
      if (e.wheelDelta > 0) {
        if ($(ref).val() * 1 < 9) {
					let newVal = ($(ref).val() * 1 + 1).toString()
					$(ref).val(newVal)
        }
      } else if (e.wheelDelta < 0) {
				if ($(ref).val() * 1 > 0) {
					let newVal = ($(ref).val() * 1 - 1).toString()
					$(ref).val(newVal)
        }
      } else if (e.key === 'Enter') {
				let val = $("#input-0").val()
				let val1 = $("#input-1").val()
				let val2 = $("#input-2").val()
				let val3 = $("#input-3").val()
				let val4 = $("#input-4").val()
				let val5 = $("#input-5").val()
				if (val && val1 && val2 && val3 && val4 && val5) {
					document.activeElement.blur();
					let code = '' + val + val1 + val2 + val3 + val4 + val5
					this.autoSubmodify(code)
				}
      }
    },

// 复制粘贴
paste(e) {
			let _this = this
      // 当进行粘贴时
      e.clipboardData.items[0].getAsString(str => {
        if (str.toString().length) {
          let codeList = str.split('')
          document.activeElement.blur()
          codeList.forEach((num, index) => {
						$(`#input-${index}`).val(num)
					})
        }
				if(str.toString().length === 6) {
					_this.autoSubmodify(str)
				}
      })
    }

完!

相关推荐
合作小小程序员小小店13 小时前
web网页开发,在线考勤管理系统,基于Idea,html,css,vue,java,springboot,mysql
java·前端·vue.js·后端·intellij-idea·springboot
防火墙在线13 小时前
前后端通信加解密(Web Crypto API )
前端·vue.js·网络协议·node.js·express
Jacky-00813 小时前
Node + vite + React 创建项目
前端·react.js·前端框架
CoderYanger14 小时前
前端基础——CSS练习项目:百度热榜实现
开发语言·前端·css·百度·html·1024程序员节
i_am_a_div_日积月累_14 小时前
10个css更新
前端·css
她是太阳,好耀眼i15 小时前
Nvm 实现vue版本切换
javascript·vue.js·ecmascript
蒲公英100115 小时前
在wps软件的word中使用js宏命令设置表格背景色
javascript·word·wps
倚栏听风雨15 小时前
npm命令详解
前端
用户479492835691515 小时前
为什么我的react项目启动后,dom上的类名里没有代码位置信息
前端·react.js
键盘飞行员15 小时前
Vue3+TypeScript项目中配置自动导入功能,遇到了问题需要详细的配置教程!
前端·typescript·vue