這篇文章主要介紹了關於使用Vue自訂數字鍵盤組件的方法,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
最近做Vue 開發,因為有不少頁面涉及到金額輸入,產品老是覺得用原生的input 進行金額輸入的話體驗很不好,於是自己動手寫了一個使用Vue自訂數字鍵盤組件,具體實現代碼大家參考下本文
為了滿足使用者體驗,小編用vue寫了一個自訂數字鍵盤元件,使用者體驗度還不錯。
廢話不多說,先上效果圖吧~
效果圖
#
具體實作
版版
#
<p class='key-container'> <p class='key-title'>请输入金额</p> <p class='input-box'>{{ money }}</p> <p class='keyboard' @click.stop='_handleKeyPress'> <p class='key-row'> <p class='key-cell' data-num='7'>7</p> <p class='key-cell' data-num='8'>8</p> <p class='key-cell' data-num='9'>9</p> <p class='key-cell' data-num='D'>C</p> </p> <p class='key-row'> <p class='key-cell' data-num='4'>4</p> <p class='key-cell' data-num='5'>5</p> <p class='key-cell' data-num='6'>6</p> <p class='key-cell' data-num='C'>清空</p> </p> <p class='key-row'> <p class='key-cell' data-num='1'>1</p> <p class='key-cell' data-num='2'>2</p> <p class='key-cell' data-num='3'>3</p> <p class='key-cell' data-num='-1'></p> </p> <p class='key-row'> <p class='key-cell disabled' data-num='-1'></p> <p class='key-cell' data-num='.'>.</p> <p class='key-cell' data-num='0'>0</p> <p class='key-cell' data-num='-1'></p> </p> <p class='key-confirm' data-num='S'>确认</p> </p> </p>
//处理按键 _handleKeyPress(e) { let num = e.target.dataset.num; //不同按键处理逻辑 // -1 代表无效按键,直接返回 if (num == -1) return false; switch (String(num)) { //小数点 case '.': this._handleDecimalPoint(); break; //删除键 case 'D': this._handleDeleteKey(); break; //清空键 case 'C': this._handleClearKey(); break; //确认键 case 'S': this._handleConfirmKey(); break; default: this._handleNumberKey(num); break; } }
//处理小数点函数 _handleDecimalPoint() { //如果包含小数点,直接返回 if (this.money.indexOf('.') > -1) return false; //如果小数点是第一位,补0 if (!this.money.length) this.money = '0.'; //如果不是,添加一个小数点 else this.money = this.money + '.'; }
//处理删除键 _handleDeleteKey() { let S = this.money; //如果没有输入,直接返回 if (!S.length) return false; //否则删除最后一个 this.money = S.substring(0, S.length - 1); }
//处理清空键 _handleClearKey() { this.money = ''; }
_handleConfirmKey() { let S = this.money; //未输入 if (!S.length){ alert( '您目前未输入!' ) return false; } //将 8. 这种转换成 8.00 if (S.indexOf('.') > -1 && S.indexOf('.') == (S.length - 1)) S = Number(S.substring(0, S.length - 1)).toFixed(2); //保留两位 S = Number(S).toFixed(2); this.$emit('confirmEvent',S) }
//处理数字 _handleNumberKey(num) { let S = this.money; //如果有小数点且小数点位数不小于2 if ( S.indexOf('.') > -1 && S.substring(S.indexOf('.') + 1).length < 2) this.money = S + num; //没有小数点 if (!(S.indexOf('.') > -1)) { //如果第一位是0,只能输入小数点 if (num == 0 && S.length == 0) this.money = '0.'; else { if (S.length && Number(S.charAt(0)) === 0) return; this.money = S + num; } } }
元件引入
元件準備好了,只需填好路徑,在對應的components 中註冊後,直接放在頁面上使用使用即可,類似下面<calculation @confirmEvent="_confirmEvent"></calculation>
_confirmEvent(res){ console.log(res) }
以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網! 相關推薦:
######VueJS元件之間透過props互動及驗證的方式###############Vue元件通訊實踐的介紹##################以上是使用Vue自訂數字鍵盤組件的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!