原生js制作简单的数字键盘


Posted in Javascript onApril 24, 2015

一、起因

最近支付的同事说,数字键盘有些问题;在移动设备上有时候比较难出现点(.) 和数字在一起的格局;因此,考虑到这种情况,就建议手写个模拟键盘了。花了一晚上的时间,写了个简单的键盘,基本能用。考虑到有的开发者没有使用juqery,就使用原生的js了。

Github地址:https://github.com/vczero/keyboard

二、截图如下

原生js制作简单的数字键盘

三、体验地址(需要点击input才能弹出数字键盘的哦)

URL: http://vczero.github.io/num_key/index.html

四、代码比较简单,直接贴了

;(function(exports){
  var KeyBoard = function(input, options){
    var body = document.getElementsByTagName('body')[0];
    var DIV_ID = options && options.divId || '__w_l_h_v_c_z_e_r_o_divid';
    
    if(document.getElementById(DIV_ID)){
      body.removeChild(document.getElementById(DIV_ID));
    }
    
    this.input = input;
    this.el = document.createElement('div');
    
    var self = this;
    var zIndex = options && options.zIndex || 1000;
    var width = options && options.width || '100%';
    var height = options && options.height || '193px';
    var fontSize = options && options.fontSize || '15px';
    var backgroundColor = options && options.backgroundColor || '#fff';
    var TABLE_ID = options && options.table_id || 'table_0909099';
    var mobile = typeof orientation !== 'undefined';
    
    this.el.id = DIV_ID;
    this.el.style.position = 'absolute';
    this.el.style.left = 0;
    this.el.style.right = 0;
    this.el.style.bottom = 0;
    this.el.style.zIndex = zIndex;
    this.el.style.width = width;
    this.el.style.height = height;
    this.el.style.backgroundColor = backgroundColor;
    
    //样式
    var cssStr = '<style type="text/css">';
    cssStr += '#' + TABLE_ID + '{text-align:center;width:100%;height:160px;border-top:1px solid #CECDCE;background-color:#FFF;}';
    cssStr += '#' + TABLE_ID + ' td{width:33%;border:1px solid #ddd;border-right:0;border-top:0;}';
    if(!mobile){
      cssStr += '#' + TABLE_ID + ' td:hover{background-color:#1FB9FF;color:#FFF;}';
    }
    cssStr += '</style>';
    
    //Button
    var btnStr = '<div style="width:60px;height:28px;background-color:#1FB9FF;';
    btnStr += 'float:right;margin-right:5px;text-align:center;color:#fff;';
    btnStr += 'line-height:28px;border-radius:3px;margin-bottom:5px;cursor:pointer;">完成</div>';
    
    //table
    var tableStr = '<table id="' + TABLE_ID + '" border="0" cellspacing="0" cellpadding="0">';
      tableStr += '<tr><td>1</td><td>2</td><td>3</td></tr>';
      tableStr += '<tr><td>4</td><td>5</td><td>6</td></tr>';
      tableStr += '<tr><td>7</td><td>8</td><td>9</td></tr>';
      tableStr += '<tr><td style="background-color:#D3D9DF;">.</td><td>0</td>';
      tableStr += '<td style="background-color:#D3D9DF;">删除</td></tr>';
      tableStr += '</table>';
    this.el.innerHTML = cssStr + btnStr + tableStr;
    
    function addEvent(e){
      var ev = e || window.event;
      var clickEl = ev.element || ev.target;
      var value = clickEl.textContent || clickEl.innerText;
      if(clickEl.tagName.toLocaleLowerCase() === 'td' && value !== "删除"){
        if(self.input){
          self.input.value += value;
        }
      }else if(clickEl.tagName.toLocaleLowerCase() === 'div' && value === "完成"){
        body.removeChild(self.el);
      }else if(clickEl.tagName.toLocaleLowerCase() === 'td' && value === "删除"){
        var num = self.input.value;
        if(num){
          var newNum = num.substr(0, num.length - 1);
          self.input.value = newNum;
        }
      }
    }
    
    if(mobile){
      this.el.ontouchstart = addEvent;
    }else{
      this.el.onclick = addEvent;
    }
    body.appendChild(this.el);
  }
  
  exports.KeyBoard = KeyBoard;

})(window);

五、简单demo

<!DOCTYPE html>
 <html>
   <head>
     <meta charset="utf-8" />
     <title>模拟数字键盘</title>
     <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, minimal-ui" />
   </head>
   <body>
     <div>
       <input id="text1" readonly="readonly" type="number" style="height:28px;width:98%;outline:none;border:1px solid #1AB6FF;padding-left:3px;"/>
       <br />
       <br />
       <input id="text2" readonly="readonly" type="number" style="height:28px;width:98%;outline:none;border:1px solid #1AB6FF;padding-left:3px;"/>
     </div>
     <script type="text/javascript" src="keyboard.js"></script>
     <script type="text/javascript">
     (function(){
       var input1 = document.getElementById('text1');
       var input2 = document.getElementById('text2');
       input1.onclick = function(){
         new KeyBoard(input1);
       };
       input2.onclick = function(){
         new KeyBoard(input2);
       };
     })();
     </script>
   </body>
 </html>

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
JScript中使用ADODB.Stream判断文件编码的代码
Jun 09 Javascript
JavaScript 动态将数字金额转化为中文大写金额
May 14 Javascript
javascript Prototype 对象扩展
May 15 Javascript
javascript中文本框中输入法切换的问题
Dec 10 Javascript
使用firebug进行调试javascript的示例
Dec 16 Javascript
AngularJS学习笔记之基本指令(init、repeat)
Jun 16 Javascript
JavaScript中各种引用类型的常用操作方法小结
May 05 Javascript
jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
Dec 24 Javascript
js中的事件委托或是事件代理使用详解
Jun 23 Javascript
jquery手机触屏滑动拼音字母城市选择器的实例代码
Dec 11 jQuery
Swiper自定义分页器使用详解
Dec 28 Javascript
bootstrap 弹出框modal添加垂直方向滚轴效果
Jul 09 Javascript
Javascript中arguments和arguments.callee的区别浅析
Apr 24 #Javascript
Node.js实现Excel转JSON
Apr 24 #Javascript
js中for in语句的用法讲解
Apr 24 #Javascript
JScript中的条件注释详解
Apr 24 #Javascript
HTML5+setCutomValidity()函数验证表单实例分享
Apr 24 #Javascript
js闭包实现按秒计数
Apr 23 #Javascript
jQuery中使用each处理json数据
Apr 23 #Javascript
You might like
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
2017/07/20 PHP
通过JAVAScript实现页面自适应
2007/01/19 Javascript
JS面向对象编程之对象使用分析
2010/08/19 Javascript
如何使用json在前后台进行数据传输实例介绍
2013/04/11 Javascript
基于JavaScript实现继承机制之调用call()与apply()的方法详解
2013/05/07 Javascript
jquery实现倒计时代码分享
2014/06/13 Javascript
JS实现双击编辑可修改状态的方法
2015/08/14 Javascript
深入理解JavaScript定时机制
2016/10/27 Javascript
详解nodejs微信公众号开发——2.自动回复
2017/04/10 NodeJs
Angular实现图片裁剪工具ngImgCrop实践
2017/08/17 Javascript
vue的无缝滚动组件vue-seamless-scroll实例
2017/12/18 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
Javascript的this详解
2019/03/23 Javascript
VUE注册全局组件和局部组件过程解析
2019/10/10 Javascript
基于jsbarcode 生成条形码并将生成的条码保存至本地+源码
2020/04/27 Javascript
[04:10]2016国际邀请赛中国区预选赛第二日TOP10精彩集锦
2016/06/28 DOTA
python 数据清洗之数据合并、转换、过滤、排序
2017/02/12 Python
使用Python对Excel进行读写操作
2017/03/30 Python
使用Python操作excel文件的实例代码
2017/10/15 Python
python3实现多线程聊天室
2018/12/12 Python
python简单实现最大似然估计&amp;scipy库的使用详解
2020/04/15 Python
numpy库reshape用法详解
2020/04/19 Python
python 等差数列末项计算方式
2020/05/03 Python
python numpy矩阵信息说明,shape,size,dtype
2020/05/22 Python
python 如何读、写、解析CSV文件
2021/03/03 Python
使用HTML和CSS3绘制基本卡通图案的示例分享
2015/11/06 HTML / CSS
html5中的input新属性range使用记录
2014/09/05 HTML / CSS
HTML5移动端手机网站开发流程
2016/04/25 HTML / CSS
HTML5离线应用与客户端存储的实现
2018/05/03 HTML / CSS
canvas生成带二维码海报的踩坑记录
2019/09/11 HTML / CSS
澳大利亚潮流尖端的快时尚品牌:Cotton On
2016/09/26 全球购物
理肤泉英国官网:La Roche-Posay英国
2019/01/14 全球购物
《狼和小羊》教学反思
2014/04/20 职场文书
充分就业社区汇报材料
2014/05/07 职场文书
个人德育工作总结
2015/03/05 职场文书
2015年派出所工作总结
2015/04/24 职场文书