原生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的变量作用域深入理解
Oct 25 Javascript
IE与FF下javascript获取网页及窗口大小的区别详解
Jan 14 Javascript
浅析javascript中function 的 length 属性
May 27 Javascript
深入了解Node.js中的一些特性
Sep 25 Javascript
js使用循环清空某个div中的input标签值
Sep 29 Javascript
js 判断登录界面的账号密码是否为空
Feb 08 Javascript
实例分析JS与Node.js中的事件循环
Dec 12 Javascript
JavaScript插入排序算法原理与实现方法示例
Aug 06 Javascript
vue封装一个简单的div框选时间的组件的方法
Jan 06 Javascript
layui 数据表格 根据值(1=业务,2=机构)显示中文名称示例
Oct 26 Javascript
vue vant中picker组件的使用
Nov 03 Javascript
如何用JavaScript检测当前浏览器是无头浏览器
Apr 27 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
星际RPG字典
2020/03/04 星际争霸
先进的自动咖啡技术,真的可以取代咖啡师吗?
2021/03/06 冲泡冲煮
php实现快速排序法函数代码
2012/08/27 PHP
Symfony2学习笔记之系统路由详解
2016/03/17 PHP
php基于PDO实现功能强大的MYSQL封装类实例
2017/02/27 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
php7 新增功能实例总结
2020/05/25 PHP
JavaScript 学习笔记之基础中的基础
2015/01/13 Javascript
javascript实现链接单选效果的方法
2015/05/13 Javascript
详解Bootstrap四种图片样式
2016/01/04 Javascript
js实现的万能flv网页播放器代码
2016/04/30 Javascript
全面解析Bootstrap中nav、collapse的使用方法
2016/05/22 Javascript
bootstrap导航、选项卡实现代码
2016/12/28 Javascript
bootstrap中的 form表单属性role=&quot;form&quot;的作用详解
2017/01/20 Javascript
Angular5中提取公共组件之radio list的实例代码
2018/07/10 Javascript
swiper Scrollbar滚动条组件详解
2019/09/08 Javascript
CountUp.js实现数字滚动增值效果
2019/10/17 Javascript
vue实现修改图片后实时更新
2019/11/14 Javascript
详解微信小程序动画Animation执行过程
2020/09/23 Javascript
python实现超简单端口转发的方法
2015/03/13 Python
python批量生成本地ip地址的方法
2015/03/23 Python
Python 绘图和可视化详细介绍
2017/02/11 Python
Python数据结构之栈、队列的实现代码分享
2017/12/04 Python
Python 解决中文写入Excel时抛异常的问题
2018/05/03 Python
使用python对多个txt文件中的数据进行筛选的方法
2019/07/10 Python
浅谈pytorch、cuda、python的版本对齐问题
2020/01/15 Python
Python用5行代码实现批量抠图的示例代码
2020/04/14 Python
Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法
2020/07/28 Python
Python爬取梨视频的示例
2021/01/29 Python
CSS+jQuery+PHP+MySQL实现的在线答题功能
2015/04/25 HTML / CSS
员工培训邀请函
2014/02/02 职场文书
《爱如茉莉》教后反思
2014/04/12 职场文书
党员个人总结范文
2015/02/14 职场文书
会计工作态度自我评价
2015/03/06 职场文书
TensorFlow的自动求导原理分析
2021/05/26 Python
idea 在springboot中使用lombok插件的方法
2021/08/02 Java/Android