原生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 相关文章推荐
Js操作Select大全(取值、设置选中等等)
Oct 29 Javascript
不提示直接关闭网页窗口的JS示例代码
Dec 17 Javascript
node.js中的http.createServer方法使用说明
Dec 14 Javascript
jQuery过滤选择器用法分析
Feb 10 Javascript
javascript实现checkbox复选框实例代码
Jan 10 Javascript
浅谈JavaScript前端开发的MVC结构与MVVM结构
Jun 03 Javascript
jquery对象和DOM对象的相互转换详解
Oct 18 Javascript
jquery popupDialog 使用 加载jsp页面的方法
Oct 25 Javascript
详解javascript获取url信息的常见方法
Dec 19 Javascript
解决vue页面刷新或者后退参数丢失的问题
Mar 13 Javascript
cocos2dx+lua实现橡皮擦功能
Dec 20 Javascript
countup.js实现数字动态叠加效果
Oct 17 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 addslashes和mysql_real_escape_string
2010/01/24 PHP
IP攻击升级,程序改进以对付新的攻击
2010/11/23 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
2012/08/08 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
2016/05/23 PHP
PHP编译configure时常见错误的总结
2017/08/17 PHP
PHP创建XML的方法示例【基于DOMDocument类及SimpleXMLElement类】
2019/09/10 PHP
用JS剩余字数计算的代码
2008/07/03 Javascript
JS复制到剪贴板示例代码
2013/10/30 Javascript
js截取小数点后几位的写法
2013/11/14 Javascript
jQuery实现的倒计时效果实例小结
2016/04/16 Javascript
jQuery弹出层后禁用底部滚动条(移动端关闭回到原位置)
2016/08/29 Javascript
JavaScript中${pageContext.request.contextPath}取值问题及解决方案
2016/12/08 Javascript
原生js实现回复评论功能
2017/01/18 Javascript
JS获取本周周一,周末及获取任意时间的周一周末功能示例
2017/02/09 Javascript
tablesorter.js表格排序使用方法(支持中文排序)
2017/02/10 Javascript
微信小程序 MD5的方法详解及实例代码
2017/03/10 Javascript
Javascript实现数组中的元素上下移动
2017/04/28 Javascript
Angular.js指令学习中一些重要属性的用法教程
2017/05/24 Javascript
JavaScript比较同一天的时间大小实例代码
2018/02/09 Javascript
node.js基础知识小结
2018/02/26 Javascript
浅谈VUE单页应用首屏加载速度优化方案
2018/08/28 Javascript
jquery 动态遍历select 赋值的实例
2018/09/12 jQuery
javscript 数组扁平化的实现
2020/02/03 Javascript
js实现3D旋转相册
2020/08/02 Javascript
python 高效去重复 支持GB级别大文件的示例代码
2018/11/08 Python
Tensorflow 使用pb文件保存(恢复)模型计算图和参数实例详解
2020/02/11 Python
利用pandas向一个csv文件追加写入数据的实现示例
2020/04/23 Python
小米旗下精品生活电商平台:小米有品
2018/12/18 全球购物
中海讯通笔试题
2015/09/15 面试题
Windows和Linux动态库应用异同
2016/04/17 面试题
怀念母亲教学反思
2014/04/28 职场文书
小学教师暑期培训心得体会
2016/01/09 职场文书
如何拟写通知正文?
2019/04/02 职场文书
Python OpenCV 彩色与灰度图像的转换实现
2021/06/05 Python
SpringBoot整合RabbitMQ的5种模式实战
2021/08/02 Java/Android
Python与C++中梯度方向直方图的实现
2022/03/17 Python