原生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 相关文章推荐
Display SQL Server Login Mode
Jun 21 Javascript
javascript 隐藏/显示指定的区域附HTML元素【legend】用法
Mar 05 Javascript
jquery.validate使用攻略 第一部
Jul 01 Javascript
jquery实现页面百叶窗走马灯式翻滚显示效果的方法
Mar 12 Javascript
jquery实现弹出层效果实例
May 19 Javascript
jQuery实现带有上下控制按钮的简单多行滚屏效果代码
Sep 04 Javascript
jquery自定义表格样式
Nov 23 Javascript
EasyUI Pagination 分页的两种做法小结
Jul 09 Javascript
JS闭包原理与应用经典示例
Dec 20 Javascript
微信小程序发送短信验证码完整实例
Jan 07 Javascript
JS查找孩子节点简单示例
Jul 25 Javascript
nuxt配置通过指定IP和端口访问的实现
Jan 08 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
PHP中ajax无刷新上传图片与图片下载功能
2017/02/21 PHP
用php+ajax新建流程(请假、进货、出货等)
2017/06/11 PHP
Yii2.0框架behaviors方法使用实例分析
2019/09/30 PHP
PHP7新特性
2021/03/09 PHP
对YUI扩展的Gird组件 Part-2
2007/03/10 Javascript
javascript 兼容鼠标滚轮事件
2009/04/07 Javascript
javascript 显示当前系统时间代码
2009/12/28 Javascript
js实现精确到秒的倒计时效果
2016/05/29 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
基于JavaScript实现活动倒计时效果
2017/04/20 Javascript
Vue自定义图片懒加载指令v-lazyload详解
2020/12/31 Javascript
利用JavaScript如何查询某个值是否数组内
2017/07/30 Javascript
javascript字体颜色控件的开发 JS实现字体控制
2017/11/27 Javascript
Node.js API详解之 module模块用法实例分析
2020/05/13 Javascript
vue props default Array或是Object的正确写法说明
2020/07/30 Javascript
[01:56]《DOTA2》中文配音CG
2013/04/22 DOTA
python按照多个字符对字符串进行分割的方法
2015/03/17 Python
Python中类的定义、继承及使用对象实例详解
2015/04/30 Python
Python实现字符串与数组相互转换功能示例
2017/09/22 Python
python微元法计算函数曲线长度的方法
2018/11/08 Python
使用python socket分发大文件的实现方法
2019/07/08 Python
Python命令行参数定义及需要注意的地方
2020/11/30 Python
python使用dlib进行人脸检测和关键点的示例
2020/12/05 Python
Django与AJAX实现网页动态数据显示的示例代码
2021/02/24 Python
html5手机端页面可以向右滑动导致样式受影响的问题
2018/06/20 HTML / CSS
Timberland美国官网:全球领先的户外品牌
2016/08/15 全球购物
国际领先的学术出版商:Springer
2017/01/11 全球购物
作风建设年活动实施方案
2014/10/24 职场文书
家长通知书家长意见
2014/12/30 职场文书
学校证明范文
2015/06/24 职场文书
董事长助理工作总结2015
2015/07/23 职场文书
小学班主任教育随笔
2015/08/15 职场文书
《颐和园》教学反思
2016/02/19 职场文书
民政局2016年“六一”儿童节慰问活动总结
2016/04/06 职场文书
广告文案的撰写技巧(实用干货)
2019/08/23 职场文书
新的CSS 伪类函数 :is() 和 :where()示例详解
2022/08/05 HTML / CSS