原生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 相关文章推荐
javascript 动态参数判空操作
Dec 22 Javascript
细品javascript 寻址,闭包,对象模型和相关问题
Apr 27 Javascript
javascript动态改变img的src属性图片不显示的解决方法
Oct 20 Javascript
javascript 二进制运算技巧解析
Nov 27 Javascript
bootstrap表单按回车会自动刷新页面的解决办法
Mar 08 Javascript
详解Vue项目编译后部署在非网站根目录的解决方案
Apr 26 Javascript
JS在if中的强制类型转换方式
Jul 15 Javascript
JavaScript实现JSON合并操作示例【递归深度合并】
Sep 07 Javascript
详解如何快速配置webpack多入口脚手架
Dec 28 Javascript
node 版本切换的实现
Feb 02 Javascript
JQuery Ajax如何实现注册检测用户名
Sep 25 jQuery
详解JS WebSocket断开原因和心跳机制
May 07 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 购物车实例(申精)
2009/05/11 PHP
一个简洁的PHP可逆加密函数(分享)
2013/06/06 PHP
重新认识php array_merge函数
2014/08/31 PHP
PHP中使用imagick实现把PDF转成图片
2015/01/26 PHP
php7 安装yar 生成docker镜像
2017/05/09 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
常用的javascript function代码
2008/05/23 Javascript
Iframe thickbox2.0使用的方法
2009/03/05 Javascript
JavaScript this 深入理解
2009/07/30 Javascript
JS去掉第一个字符和最后一个字符的实现代码
2014/02/20 Javascript
jQuery中each()、find()和filter()等节点操作方法详解(推荐)
2016/05/25 Javascript
浅谈js数组和splice的用法
2016/12/04 Javascript
ReactNative中使用Redux架构总结
2017/12/15 Javascript
js与jQuery实现获取table中的数据并拼成json字符串操作示例
2018/07/12 jQuery
解决jquery有正确返回值但不执行success函数的问题
2018/08/20 jQuery
vxe-table vue table 表格组件功能
2019/05/26 Javascript
JavaScript实现图片伪异步上传过程解析
2020/04/10 Javascript
微信小程序实现分页加载效果
2020/11/19 Javascript
[52:57]2014 DOTA2国际邀请赛中国区预选赛 LGD-CDEC VS HGT
2014/05/21 DOTA
Python实现爬取知乎神回复简单爬虫代码分享
2015/01/04 Python
简单谈谈python中的Queue与多进程
2016/08/25 Python
用python实现k近邻算法的示例代码
2018/09/06 Python
使用pyecharts生成Echarts网页的实例
2019/08/12 Python
Python pandas RFM模型应用实例详解
2019/11/20 Python
python基于celery实现异步任务周期任务定时任务
2019/12/30 Python
matplotlib quiver箭图绘制案例
2020/04/17 Python
python飞机大战游戏实例讲解
2020/12/04 Python
Kenneth Cole官网:纽约时尚优雅品牌
2016/11/14 全球购物
澳大利亚正品化妆品之家:Cosmetic Capital
2017/07/03 全球购物
Eyeko美国:屡获殊荣的睫毛膏、眼线笔和眉妆
2018/07/05 全球购物
STAUD官方网站:洛杉矶独有的闲适风格
2019/04/11 全球购物
使用Vue.js和MJML创建响应式电子邮件
2021/03/23 Vue.js
《美丽的田园》教学反思
2014/03/01 职场文书
代办出身证明书
2014/10/21 职场文书
工作岗位职责范本
2015/02/15 职场文书
教你用python实现12306余票查询
2021/06/30 Python