原生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 相关文章推荐
5 cool javascript apps
Mar 24 Javascript
js实现的网页颜色代码表全集
Jul 17 Javascript
15个jquery常用方法、小技巧分享
Jan 13 Javascript
javascript实现点击按钮弹出一个可关闭层窗口同时网页背景变灰的方法
May 13 Javascript
果断收藏9个Javascript代码高亮脚本
Jan 06 Javascript
JS基础随笔(菜鸟必看篇)
Jul 13 Javascript
浅谈原型对象的常用开发模式
Jul 22 Javascript
JavaScript中常见内置函数用法示例
May 14 Javascript
使用vue-router完成简单导航功能【推荐】
Jun 28 Javascript
vue发送websocket请求和http post请求的实例代码
Jul 11 Javascript
浅谈webpack和webpack-cli模块源码分析
Jan 19 Javascript
基于node+websocket+html实现腾讯课堂聊天室聊天功能
Mar 04 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
Yii框架操作cookie与session的方法实例详解
2019/09/04 PHP
document对象execCommand的command参数介绍
2006/08/01 Javascript
javascript AOP 实现ajax回调函数使用比较方便
2010/11/20 Javascript
利用js实现遮罩以及弹出可移动登录窗口
2013/07/08 Javascript
使用js实现按钮控制文本框加1减1应用于小时+分钟
2013/12/09 Javascript
纯js实现遮罩层效果原理分析
2014/05/27 Javascript
nodejs npm包管理的配置方法及常用命令介绍
2014/06/05 NodeJs
通过JS来动态的修改url,实现对url的增删查改
2014/09/01 Javascript
超赞的jQuery图片滑块动画特效代码汇总
2016/01/25 Javascript
javascript 显示全局变量与隐式全局变量的区别
2017/02/09 Javascript
JS实现页面打印功能
2017/03/16 Javascript
Bootstrap常用组件学习(整理)
2017/03/24 Javascript
Nodejs实现多房间简易聊天室功能
2017/06/20 NodeJs
vue.js如何更改默认端口号8080为指定端口的方法
2017/07/14 Javascript
详解js的作用域、预解析机制
2018/02/05 Javascript
解决vue 更改计算属性后select选中值不更改的问题
2018/03/02 Javascript
jQuery使用$.extend(true,object1, object2);实现深拷贝对象的方法分析
2019/03/06 jQuery
vue element 生成无线级左侧菜单的实现代码
2019/08/21 Javascript
微信小程序去除左上角返回键的实现方法
2020/03/06 Javascript
jQuery 实现扁平式小清新导航
2020/07/07 jQuery
vue 清空input标签 中file的值操作
2020/07/21 Javascript
Vue绑定用户接口实现代码示例
2020/11/04 Javascript
python实现系统状态监测和故障转移实例方法
2013/11/18 Python
Python for循环生成列表的实例
2018/06/15 Python
Python中创建二维数组
2018/10/17 Python
Tensorflow 自定义loss的情况下初始化部分变量方式
2020/01/06 Python
python自动下载图片的方法示例
2020/03/25 Python
appium+python自动化配置(adk、jdk、node.js)
2020/11/17 Python
英国演唱会订票网站:Ticket Selection
2018/03/27 全球购物
西班牙香水和化妆品连锁店:Druni
2019/05/05 全球购物
心理学专业毕业生推荐信范文
2013/11/21 职场文书
竞聘书模板
2014/03/31 职场文书
护理专业毕业生自荐信
2014/06/15 职场文书
授权委托书(公民个人适用)
2014/09/19 职场文书
LayUI+Shiro实现动态菜单并记住菜单收展的示例
2021/05/06 Javascript
再谈python_tkinter弹出对话框创建
2022/03/20 Python