js仿支付寶多方框輸入支付密碼效果
上次看到別人說(shuō)寫一個(gè)類似支付寶支付密碼的輸入框效果,今天就想自己寫了試試看,大體功能是實(shí)現(xiàn)了。
已實(shí)現(xiàn)部分:
1. 焦點(diǎn)會(huì)隨著輸入數(shù)值往后推移
2. 如果輸入的非0-9,則會(huì)出現(xiàn)提示
3. 按Backspance回車可以對(duì)應(yīng)格子焦點(diǎn)往前推移
4. 按回車或者點(diǎn)擊按鈕可以觸發(fā)按鈕點(diǎn)擊事件,獲得輸入值
未完善部分:
1. 在控制輸入類型的時(shí)候,只有0-9、非0-9以及回車、回刪幾個(gè)鍵盤事件的區(qū)分,不夠完善
2. 輸入框用的input標(biāo)簽,password類型,會(huì)將輸入值變成圓點(diǎn),但是圓點(diǎn)太小不夠美觀,不知道如何改變圓點(diǎn)大小,考慮是否要畫(huà)個(gè)圓點(diǎn)遮蓋
ps:代碼不夠精簡(jiǎn),很多感覺(jué)還可以改進(jìn)精簡(jiǎn)。
效果圖:
代碼段:
**index.html 主要代碼**
<div class="content"> <div class="title">支付寶支付密碼:</div> <div class="box"></div> <div class="forget">忘記密碼?</div> <div class="point">請(qǐng)輸入6位數(shù)字密碼</div> <button class="getPasswordBtn">一鍵獲取密碼</button> <div class="errorPoint">請(qǐng)輸入數(shù)字!</div> </div>
**reset.css代碼**
*{ padding: 0; margin: 0; } .content{ width: 400px; height: 50px; margin: 0 auto; margin-top: 100px; } .title{ font-family: '微軟雅黑'; font-size: 16px; } .box{ width: 190px; height: 30px; border:1px solid #ccc; margin-top: 10px; line-height: 30px; } .content .box,.forget{ display: inline-block; } .content .forget{ width: 100px; color:lightskyblue; vertical-align: super; font-size: 14px; } .box input.paw{ width: 30px; height: 20px; line-height: 20px; margin-left: -9px; border:none; border-right: 1px dashed #ccc; text-align: center; } .box input.paw:nth-child(1){ margin-left: 0; } .content .box .pawDiv:nth-child(6) input.paw{ border: none; } .content .box input.paw:focus{outline:0;} .content .box .pawDiv{ display: inline-block; line-height: 30px; width: 31px; height: 31px; margin-top: -2px; float: left; } .point{ font-size: 14px; color: #ccc; margin: 5px 0; } .errorPoint{ color: red; display: none; } .getPasswordBtn{ width: 100px; height: 30px; background-color: cornflowerblue; font-size: 14px; font-family: '微軟雅黑'; color: white; border: none; }
**main.js代碼**
/*動(dòng)態(tài)生成*/ var box=document.getElementsByClassName("box")[0]; function createDIV(num){ for(var i=0;i<num;i++){ var pawDiv=document.createElement("div"); pawDiv.className="pawDiv"; box.appendChild(pawDiv); var paw=document.createElement("input"); paw.type="password"; paw.className="paw"; paw.maxLength="1"; paw.readOnly="readonly"; pawDiv.appendChild(paw); } } createDIV(6); var pawDiv=document.getElementsByClassName("pawDiv"); var paw=document.getElementsByClassName("paw"); var pawDivCount=pawDiv.length; /*設(shè)置第一個(gè)輸入框默認(rèn)選中*/ pawDiv[0].setAttribute("style","border: 2px solid deepskyblue;"); paw[0].readOnly=false; paw[0].focus(); var errorPoint=document.getElementsByClassName("errorPoint")[0]; /*綁定pawDiv點(diǎn)擊事件*/ function func(){ for(var i=0;i<pawDivCount;i++){ pawDiv[i].addEventListener("click",function(){ pawDivClick(this); }); paw[i].onkeyup=function(event){ console.log(event.keyCode); if(event.keyCode>=48&&event.keyCode<=57){ /*輸入0-9*/ changeDiv(); errorPoint.style.display="none"; }else if(event.keyCode=="8") { /*退格回刪事件*/ firstDiv(); }else if(event.keyCode=="13"){ /*回車事件*/ getPassword(); }else{ /*輸入非0-9*/ errorPoint.style.display="block"; this.value=""; } }; } } func(); /*定義pawDiv點(diǎn)擊事件*/ var pawDivClick=function(e){ for(var i=0;i<pawDivCount;i++){ pawDiv[i].setAttribute("style","border:none"); } e.setAttribute("style","border: 2px solid deepskyblue;"); }; /*定義自動(dòng)選中下一個(gè)輸入框事件*/ var changeDiv=function(){ for(var i=0;i<pawDivCount;i++){ if(paw[i].value.length=="1"){ /*處理當(dāng)前輸入框*/ paw[i].blur(); /*處理上一個(gè)輸入框*/ paw[i+1].focus(); paw[i+1].readOnly=false; pawDivClick(pawDiv[i+1]); } } }; /*回刪時(shí)選中上一個(gè)輸入框事件*/ var firstDiv=function(){ for(var i=0;i<pawDivCount;i++){ console.log(i); if(paw[i].value.length=="0"){ /*處理當(dāng)前輸入框*/ console.log(i); paw[i].blur(); /*處理上一個(gè)輸入框*/ paw[i-1].focus(); paw[i-1].readOnly=false; paw[i-1].value=""; pawDivClick(pawDiv[i-1]); break; } } }; /*獲取輸入密碼*/ var getPassword=function(){ var n=""; for(var i=0;i<pawDivCount;i++){ n+=paw[i].value; } alert(n); }; var getPasswordBtn=document.getElementsByClassName("getPasswordBtn")[0]; getPasswordBtn.addEventListener("click",getPassword); /*鍵盤事件*/ document.onkeyup=function(event){ if(event.keyCode=="13") { /*回車事件*/ getPassword(); } };
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript知識(shí)點(diǎn)總結(jié)(十六)之Javascript閉包(Closure)代碼詳解
閉包是可以包含自由(未綁定)變量的代碼塊;這些變量不是在這個(gè)代碼塊或者任何全局上下文中定義的,而是在定義代碼塊的環(huán)境中定義。本文主要介紹了javascript中的閉包,感興趣的朋友一起看看吧2016-05-05javascript firefox 自動(dòng)加載iframe 自動(dòng)調(diào)整高寬示例
iframe 自動(dòng)獲取onload高寬以及iframe 自動(dòng)加載,具體實(shí)現(xiàn)如下,感興趣的朋友可以參考下2013-08-08微信小程序?qū)崿F(xiàn)九宮格翻牌動(dòng)畫(huà)
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)九宮格翻牌動(dòng)畫(huà),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04js+css實(shí)現(xiàn)上下翻頁(yè)相冊(cè)代碼分享
這篇文章主要介紹了js+css實(shí)現(xiàn)上下翻頁(yè)相冊(cè)特效,相冊(cè)可以從上方或者下方隨意切換,推薦給大家,有需要的小伙伴可以參考下。2015-08-08微信小程序緩存支持二次開(kāi)發(fā)封裝實(shí)現(xiàn)解析
這篇文章主要介紹了微信小程序緩存支持二次開(kāi)發(fā)封裝實(shí)現(xiàn)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12微信小程序長(zhǎng)按識(shí)別二維碼的幾種情況分析
最近接到需求,在小程序內(nèi)部長(zhǎng)按識(shí)別二維碼添加個(gè)人微信,下面這篇文章主要給大家分析介紹了關(guān)于微信小程序長(zhǎng)按識(shí)別二維碼的幾種情況,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08JavaScript中的子窗口與父窗口的互相調(diào)用問(wèn)題
本文給大家介紹了JavaScript中的子窗口與父窗口的互相調(diào)用問(wèn)題,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-02-02