F2e踩坑之路前端让前端飞

我劝你别在数字键盘上刁难我——Vue自定义数字键盘组件

2017-12-18  本文已影响140人  Cryptic

Vue自定义数字键盘

前言

最近做 Vue 开发,因为有不少页面涉及到金额输入,产品老是觉得用原生的 input 进行金额输入的话 体验很不好,天天催着我找时间优化,原生控件还有优化个毛线,回去等死吧~

绝望

既然要用户体验,而我又对原生控件感到很绝望,于是!我有一个大胆的想法....

我们自己动手写一个!

废话不多说,先上效果图吧~

效果图

效果图

具体实现

布局排版

<div class='key-container'>
    <div class='key-title'>请输入金额</div>
    <div class='input-box'>{{ money }}</div>
    <div class='keyboard' @click.stop='_handleKeyPress'>
        <div class='key-row'>
            <div class='key-cell' data-num='7'>7</div>
            <div class='key-cell' data-num='8'>8</div>
            <div class='key-cell' data-num='9'>9</div>
            <div class='key-cell' data-num='D'>C</div>
        </div>
        <div class='key-row'>
            <div class='key-cell' data-num='4'>4</div>
            <div class='key-cell' data-num='5'>5</div>
            <div class='key-cell' data-num='6'>6</div>
            <div class='key-cell' data-num='C'>清空</div>
        </div>
        <div class='key-row'>
            <div class='key-cell' data-num='1'>1</div>
            <div class='key-cell' data-num='2'>2</div>
            <div class='key-cell' data-num='3'>3</div>
            <div class='key-cell' data-num='-1'></div>
        </div>
        <div class='key-row'>
            <div class='key-cell disabled' data-num='-1'></div>
            <div class='key-cell' data-num='.'>.</div>
            <div class='key-cell' data-num='0'>0</div>
            <div class='key-cell' data-num='-1'></div>
        </div>
        <div class='key-confirm' data-num='S'>确认</div>
    </div>
</div>

样式代码我在这里就不贴了,具体的我托管到 github 上了~

输入判断

对于键盘来说,最主要的就是输入判断,整个键盘的输入都是先经过 _handleKeyPress 进行处理的

//处理按键
_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;
    }
}

可以看出,我将按键种类分为了,五大类,分别是 小数点删除(退格)键清空键确认键数字键,分别对应不同的处理函数,接下来我们一一来分析~

组件引入

组件准备好了,只需填好路径,在对应的 components 中注册后,直接放在页面上使用使用即可,类似下面

<calculation @confirmEvent="_confirmEvent"></calculation>

其中, _confirmEvent 是点击确认键的回调,参数就是输入的金额,我这里只是简单的打印而已~

_confirmEvent(res){
    console.log(res)
}

效果就跟下面差不多,

确认效果图

结语

怎么样,是不是很简单,so easy , 再也不怕产品让我天天用户体验了。
当然,我这里只是写了一个基础,具体的还得切合自己的业务逻辑,感兴趣的同学可以自己对其在进行封装,实现纯数字或者带小数点直接的切换式键盘等,看你们发挥~

xx

完整代码,请戳这里~

上一篇 下一篇

猜你喜欢

热点阅读