vue完成輸入金額框/驗(yàn)證碼框/密碼框可用的組件

image.png

呈現(xiàn)的效果大概是這樣的,驗(yàn)證碼框和密碼框都是可以使用這套代碼的,只是修改樣式而已.
主要功能是可以實(shí)現(xiàn)輸入數(shù)字以后(用正則限定了只可以輸入數(shù)字),光標(biāo)自動(dòng)下跳,刪除自動(dòng)上跳.鍵入以后輸入框原數(shù)據(jù)清空,未做更改,失焦之后輸入框數(shù)據(jù)不變.
找了很久沒(méi)找到合適的,最終還是自己完成了一個(gè).代碼注釋也寫(xiě)的比較清晰.

代碼如下(本人編程能力一般所以寫(xiě)的也比較簡(jiǎn)單通俗,如果真的被大佬看到,有什么不好的地方請(qǐng)馬上指出謝謝):
html部分

<div class="verifyCode">
    <div class="verifyCodeItem" v-for="p in inputNums" :key="p">
      <input
        type="text"
        @input="inputFun($event,p)"
        @focus="onInputIn($event,p)"
        @blur="onInputOut($event,p)"
        @keyup.delete="onInputDelete($event,p)"
        :value="code[p-1]"
        :class="{success: code[p-1]===0}"
      />
      <span v-if="p==2">億</span>
      <span v-if="p==6">萬(wàn)</span>
      <span v-if="p==10">.</span>
      <span v-if="p==12">份</span>
    </div>
  </div>

js部分

export default {
  props: {
    inputNums: {
      type: Number,
      default: 12
    },
    value: {
      type: String,
      default: '000000000000'
    },
    realValue: {
      type: String
    }
  },
  data () {
    return {
      code: this.value.split(''),
      historyVal: '',
      isChange: false
    }
  },
  methods: {
    // 獲取焦點(diǎn)時(shí)
    onInputIn (e, p) {
      this.historyVal = this.code[p - 1]
      this.$set(this.code, p - 1, '')
    },
    // 失去焦點(diǎn)時(shí)
    onInputOut (e, p) {
      if (this.isChange) {
        this.isChange = false
        this.historyVal = this.code[p - 1]
      } else {
        this.$set(this.code, p - 1, this.historyVal)
      }
      // 失去焦點(diǎn)時(shí)傳遞當(dāng)前code值
      let newVal = this.code.map(item => {
        if (item === '' || item === 'underfined') {
          item = '0'
        }
        return item
      })
      this.$emit('getVal', (newVal.join('') / 100).toString())
    },
    // 鍵入內(nèi)容時(shí)
    inputFun (e, p) {
      let ele = e.target
      let siblingsNode = ele.parentNode.parentNode.children

      // 獲取填入的值,并且存入
      let value = ele.value.replace(/[^\d]/g, '').slice(-1)
      ele.parentNode.value = value
      this.$set(this.code, p - 1, value)
      // 邊界值處理
      if (p >= siblingsNode.length - 1) {
        p = siblingsNode.length - 1
      }
      // 記錄更改,下一個(gè)元素獲得焦點(diǎn)
      if (value) {
        this.isChange = true
        siblingsNode[p].children[0].focus()
      }
    },
    // 按下刪除鍵(delete/backspace)時(shí)
    onInputDelete (e, p) {
      let ele = e.target
      let siblingsNode = ele.parentNode.parentNode.children
      // 當(dāng)前光標(biāo)所指的位置數(shù)值是0
      this.historyVal = 0
      this.code[p - 1] = 0
      // 邊界值處理
      if (p <= 2) {
        p = 2
      }
      siblingsNode[p - 2].children[0].focus()
    }
  }
}

css部分

@mixin border() {
  border: 0.5px solid #dbd8d2;
  background-color: #ebe8e2;
  box-shadow: inset 0px 15px 10px -15px #c6c3be;
}
.verifyCode {
  display: flex;
  color: #38383b;
  .verifyCodeItem {
    display: flex;
    align-items: baseline;
    > span {
      margin: 0 5px;
    }
  }
  input {
    @include border();
    font-size: 14px;
    margin-left: 2px;
    width: 30px;
    height: 40px;
    border-radius: 5px;
    text-align: center;
    color: #a08d79;
    font-size: 20px;
    &:first {
      margin-left: 0;
    }
    &:focus {
      outline-color: #a08d79;
      outline-width: 0.5px;
    }
    &.success {
      border-color: #dbd8d2;
      border-width: 0.5px;
      transition: border-color 0.5s;
      outline: none;
    }
  }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末批糟,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌痛阻,老刑警劉巖她肯,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件毙芜,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡膛锭,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)蚊荣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)初狰,“玉大人,你說(shuō)我怎么就攤上這事妇押□尉浚” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵敲霍,是天一觀的道長(zhǎng)俊马。 經(jīng)常有香客問(wèn)我,道長(zhǎng)肩杈,這世上最難降的妖魔是什么柴我? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮扩然,結(jié)果婚禮上艘儒,老公的妹妹穿的比我還像新娘。我一直安慰自己夫偶,他們只是感情好界睁,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著兵拢,像睡著了一般翻斟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上说铃,一...
    開(kāi)封第一講書(shū)人閱讀 49,806評(píng)論 1 290
  • 那天访惜,我揣著相機(jī)與錄音,去河邊找鬼腻扇。 笑死债热,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的幼苛。 我是一名探鬼主播窒篱,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了墙杯?” 一聲冷哼從身側(cè)響起济锄,我...
    開(kāi)封第一講書(shū)人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎霍转,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體一汽,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡避消,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了召夹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片岩喷。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖监憎,靈堂內(nèi)的尸體忽然破棺而出纱意,到底是詐尸還是另有隱情,我是刑警寧澤鲸阔,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布偷霉,位于F島的核電站,受9級(jí)特大地震影響褐筛,放射性物質(zhì)發(fā)生泄漏类少。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一渔扎、第九天 我趴在偏房一處隱蔽的房頂上張望硫狞。 院中可真熱鬧,春花似錦晃痴、人聲如沸残吩。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)泣侮。三九已至,卻和暖如春笤虫,著一層夾襖步出監(jiān)牢的瞬間旁瘫,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工琼蚯, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留酬凳,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓遭庶,卻偏偏與公主長(zhǎng)得像宁仔,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子峦睡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348