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

完!

相关推荐
用户69371750013843 小时前
Google 正在“收紧侧加载”:陌生 APK 安装或需等待 24 小时
android·前端
蓝帆傲亦3 小时前
Web 前端搜索文字高亮实现方法汇总
前端
用户69371750013843 小时前
Room 3.0:这次不是升级,是重来
android·前端·google
漫随流水4 小时前
旅游推荐系统(view.py)
前端·数据库·python·旅游
踩着两条虫6 小时前
VTJ.PRO 核心架构全公开!从设计稿到代码,揭秘AI智能体如何“听懂人话”
前端·vue.js·ai编程
jzlhll1237 小时前
kotlin Flow first() last()总结
开发语言·前端·kotlin
用头发抵命7 小时前
Vue 3 中优雅地集成 Video.js 播放器:从组件封装到功能定制
开发语言·javascript·ecmascript
蓝冰凌7 小时前
Vue 3 中 defineExpose 的行为【defineExpose暴露ref变量】详解:自动解包、响应性与实际使用
前端·javascript·vue.js
奔跑的呱呱牛8 小时前
generate-route-vue基于文件系统的 Vue Router 动态路由生成工具
前端·javascript·vue.js