原生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 相关文章推荐
TBCompressor js代码压缩
Jan 05 Javascript
Javascript事件实例详解
Nov 06 Javascript
JavaScript实现算术平方根算法-代码超简单
Sep 11 Javascript
Uploadify上传文件方法
Mar 16 Javascript
基于 Node.js 实现前后端分离
Apr 23 Javascript
JQuery的常用选择器、过滤器、方法全面介绍
May 25 Javascript
JS动态加载脚本并执行回调操作
Aug 24 Javascript
js微信支付实现代码
Dec 22 Javascript
vue的一个分页组件的示例代码
Dec 25 Javascript
vue.js实现带日期星期的数字时钟功能示例
Aug 28 Javascript
vue.js 实现a标签href里添加参数
Nov 12 Javascript
three.js 利用uv和ThreeBSP制作一个快递柜功能
Aug 18 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
新版mysql+apache+php Linux安装指南
2006/10/09 PHP
一个简洁实用的PHP缓存类完整实例
2014/07/26 PHP
php+jQuery.uploadify实现文件上传教程
2014/12/26 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
2016/10/12 PHP
php实用代码片段整理
2016/11/12 PHP
浅谈php中的访问修饰符private、protected、public的作用范围
2016/11/20 PHP
Javascript &amp; DHTML 实例编程(教程)(三)初级实例篇1—上传文件控件实例
2007/06/02 Javascript
JavaScript 组件之旅(一)分析和设计
2009/10/28 Javascript
javascript获取设置div的高度和宽度兼容任何浏览器
2013/09/22 Javascript
js日期相关函数总结分享
2013/10/15 Javascript
JS、CSS加载中的小问题探讨
2013/11/26 Javascript
js构造函数、索引数组和属性的实现方式和使用
2014/11/16 Javascript
javascript操作符&quot;!~&quot;详解
2015/02/10 Javascript
纯css实现窗户玻璃雨滴逼真效果
2015/08/23 Javascript
jQuery图片轮播滚动切换代码分享
2020/04/20 Javascript
JavaScript DOM节点操作方法总结
2016/08/23 Javascript
浅谈Nodejs应用主文件index.js
2016/08/28 NodeJs
详谈innerHTML innerText的使用和区别
2017/08/18 Javascript
微信小程序bindinput与bindsubmit的区别实例分析
2019/04/17 Javascript
详解ES6 中的Object.assign()的用法实例代码
2021/01/11 Javascript
Python中asyncore的用法实例
2014/09/29 Python
基于Python实现文件大小输出
2016/01/11 Python
Python的Flask站点中集成xhEditor文本编辑器的教程
2016/06/13 Python
python中使用xlrd读excel使用xlwt写excel的实例代码
2018/01/31 Python
Flask框架实现给视图函数增加装饰器操作示例
2018/07/16 Python
python 计算数据偏差和峰度的方法
2019/06/29 Python
Python实现http接口自动化测试的示例代码
2020/10/09 Python
python 使用paramiko模块进行封装,远程操作linux主机的示例代码
2020/12/03 Python
购买大码女装:Lane Bryant
2016/09/07 全球购物
独特的礼品和创新的科技产品:The Grommet
2018/02/24 全球购物
Grow Gorgeous美国官网:只要八天,体验唤醒毛囊后新生的茂密秀发
2018/06/04 全球购物
Kiwi.com中国:找到特价机票并发现新目的地
2019/10/27 全球购物
2014年妇联工作总结
2014/11/21 职场文书
关于学习的决心书
2015/02/05 职场文书
美德少年主要事迹材料
2015/11/04 职场文书
React forwardRef的使用方法及注意点
2021/06/13 Javascript