先上效果:

   js直接应用:  $('input').mynumkb(); 就出来效果

HTML:

<input maxlength="4" type="text" onkeyup="if (this.value==this.value2) return; if (this.value.search(/^\d{0,4}$/)==-1) this.value=(this.value2)?this.value2:'';else this.value2=this.value;" placeholder="请输入正整数" >

CSS:

<style>
.clearfix:after {
visibility: hidden;
display: block;
font-size:;
content: " ";
clear: both;
height:;
}
.mykb-box{
width:390px;
height:370px;
background:rgba(0,0,0,0.6);
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000,endColorstr=#99000000);
box-shadow:0 0 10px rgb(43, 42, 42);
padding:20px;
border-radius:10px;
user-select: none;
-ms-user-select: none;
position:absolute;
display: none;
}
.mykb-box ul,.mykb-box li{
list-style: none;
}
.mykb-box li{
width:70px;
height:70px;
line-height:70px;
text-align: center;
background:#f5f5f5;
border-radius:10px;
font-weight:bold;
margin:10px;
float:left;
box-shadow: 0px 2px 1px #000;
color:#1b50a2;
font-size:24px;
cursor:pointer;
}
.mykb-box li.active{
box-shadow:0px -2px 1px #000;
}
.mykb-box .func{color:#fff;width:100px;}
.mykb-box .exit{background:#F44336;}
.mykb-box .del{background:#ff9800}
.mykb-box .clearall{background:#2196F3}
.mykb-box .sure{background: #4CAF50;width:190px;}
</style>

JS:

/**
* Created by on 2019/7/11.
*
* 数字键盘插件 js
*/ (function($){
var _count = 0;
var Mynumkb = function(element, options){
_count++;
this.count = _count;
this.$element = $(element);
this.$element.attr("data-count",this.count);
this.options = $.extend({},$.fn.mynumkb.defaults, options);
this.init();
}
Mynumkb.prototype = {
constructor: Mynumkb,
init:function(){
var me= this;
me.render();
me.bind();
me.initHtml();
},
render:function(){
var me = this;
me.$eparentNode = me.$element.parent();
},
bind:function(){
var me = this;
me.$element.on("click",$.proxy(me['_eClick'],me)); $(document).on("mousedown","#mykeyboard"+me.count+" li",$.proxy(me['_limousedown'],me));
$(document).on("mouseup","#mykeyboard"+me.count+" li",$.proxy(me['_limouseup'],me));
$(document).on("click","#mykeyboard"+me.count+" li",$.proxy(me['_liclick'],me));
},
initHtml:function(){
var me = this;
var _html = [
'<div class="mykb-box" id="mykeyboard'+me.count+'">',
'<ul class="num-key clearfix">',
'<li class="num">1</li>',
'<li class="num">2</li>',
'<li class="num">3</li>',
'<li class="func exit">退出</li>',
'<li class="num">4</li>',
'<li class="num">5</li>',
'<li class="num">6</li>',
'<li class="func del">退格</li>',
'<li class="num">7</li>',
'<li class="num">8</li>',
'<li class="num">9</li>',
'<li class="func clearall">清除</li>',
'<li class="num">0</li>',
'<li class="num">.</li>',
'<li class="func sure">确定</li>',
'</ul>',
'</div>',
].join(""); $("body").append(_html);
me.setPosition();
},
setPosition:function(){
var me = this;
var parentNode = me.$eparentNode;
var $element = me.$element;
$("body").css("position","relative");
var height = $element.outerHeight();
var width = $element.outerWidth();
var position = $element.position();
var $keyboard = $("#mykeyboard"+me.count);
var ulWidth = $keyboard.outerWidth();
var ulHeight = $keyboard.outerHeight();
var left = position.left;
$keyboard.css({
top:position.top+height+30+"px",
left:left+width+30+"px"
});
},
_eClick:function(e){
var me = this;
var count = me.$element.data("count");
var $keyboard = $("#mykeyboard"+count);
$keyboard.fadeIn(100).siblings(".mykb-box").hide();
},
_liclick:function(e){
var me = this;
var $target = $(e.target);
if($target.hasClass("del")){//退格
me.setValue("del");
}else if($target.hasClass("exit")||$target.hasClass("sure")){//退出--确定
me.close();
}else if($target.hasClass("clearall")){//清除
me.$element.val("");
}else{//输入其他数字
var str = $target.text();
me.setValue("add",str);
}
},
_limousedown:function(e){
var me = this;
var val = $(e.target).html();
$(e.target).addClass("active").siblings().removeClass("active");
},
_limouseup:function(e){
var me = this;
var val = $(e.target).html();
$(e.target).removeClass("active"); },
setValue:function(type,str){
var me = this;
var curpos = me.getCursorPosition();
var val = me.$element.val();
var newstr = "";
if(type == 'add'){
newstr = me.insertstr(val,str,curpos);
me.$element.val(newstr);
me.$element.textFocus(curpos+1);
}else if(type == 'del'){
newstr = me.delstr(val,curpos);
me.$element.val(newstr);
me.$element.textFocus(curpos-1);
} },
insertstr:function(str,insertstr,pos){
var str = str.toString();
var newstr = str.substr(0,pos)+''+insertstr+''+str.substr(pos);
return newstr;
},
delstr:function(str,pos){
var str = str.toString();
var newstr = "";
if(pos != 0){
newstr = str.substr(0,pos-1)+str.substr(pos);
}else{
newstr = str;
}
return newstr;
},
getCursorPosition:function(){
var me = this;
var $element = me.$element[0];
var cursurPosition=-1;
if($element.selectionStart!=undefined && $element.selectionStart!=null){//非IE浏览器
cursurPosition= $element.selectionStart;
}else{//IE
var range = document.selection.createRange();
range.moveStart("character",-$element.value.length);
cursurPosition=range.text.length;
}
return cursurPosition;
},
close:function(){
var me = this;
var count = me.$element.data("count");
var $keyboard = $("#mykeyboard"+count);
$keyboard.fadeOut(100);
me.$element.attr("isshowkb","false");
}
};
$.fn.mynumkb = function (option) {
return this.each(function () {
var options = typeof option == 'object' ? option : {};
var data = new Mynumkb(this, options);
})
}
$.fn.mynumkb.defaults = { };
$.fn.mynumkb.Constructor = Mynumkb; })(jQuery);
(function($){
$.fn.textFocus=function(v){
var range,len,v=v===undefined?0:parseInt(v);
this.each(function(){
if(navigator.userAgent.msie){
range=this.createTextRange();
v===0?range.collapse(false):range.move("character",v);
range.select();
}else{
len=this.value.length;
v===0?this.setSelectionRange(len,len):this.setSelectionRange(v,v);
}
this.focus();
});
return this;
}
})(jQuery);

jQuery 虚拟数字键盘代码的更多相关文章

  1. 基于jQuery的数字键盘插件

    有时,我们需要在网页上使用软键盘.今天,就给大家带来一个基于jQuery的数字键盘插件,除了jQuery,不需要依赖任何文件资源.纯数字键盘,有退格,有清除,不支持输入小数(需要的可以自己改一下,主要 ...

  2. 基于jQuery的软键盘

    基于jQuery的软键盘   前些天写了一个基于基于jQuery的数字键盘,今天给大家带来一个基于jQuery的全字母键盘插件(支持全字母大小写切换,数字输入,退格清除,关闭功能,可调整大小和键盘位置 ...

  3. jQuery动态数字翻滚计数到指定数字的文字特效代码

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. 一个数字键盘引发的血案——移动端H5输入框、光标、数字键盘全假套件实现

    https://juejin.im/post/5a44c5eef265da432d2868f6 为啥要写假键盘? 还是输入框.光标全假的假键盘? 手机自带的不用非得写个假的,吃饱没事干吧? 装逼?炫技 ...

  5. 示例:WPF仿制OSK做的系统键盘和数字键盘

    原文:示例:WPF仿制OSK做的系统键盘和数字键盘 一.目的:在应用osk.exe系统键盘时遇到很多不方便,比如有些系统调用不出来等问题,由此开发了一个系统键盘仿制osk 二.实现功能 1.目前实现大 ...

  6. WPF开发经验-实现Win10虚拟触摸键盘

    一 引入 项目有个需求,需要实现纯触控操作进行键盘输入.项目部署在Win10系统上,考虑有两种方案来实现. 通过调用Win10自带的触摸键盘来实现: 通过WPF实现一个触摸键盘来实现: 二 调用Win ...

  7. 手机端访问web调用数字键盘。

    转自  http://www.webkfa.com/one4/w1937.html 最近在做手机页面时,遇到数字输入的键盘的问题,之前的做法只是一刀切的使用 type="tel", ...

  8. jQuery用户数字评分效果

    效果预览:http://hovertree.com/texiao/jquery/5.htm HTML文件代码: <!DOCTYPE html> <html xmlns="h ...

  9. iOS数字键盘自定义按键

    UIKeyboardTypeNumberPad 数字键盘自定义按键 最近做一个搜索用户的功能,这里使用了UISearchBar.由于搜索的方式只有手机号码,所以这里的键盘要限制为数字输入,可以这么做: ...

随机推荐

  1. PHP mysqli_next_result() 函数

    定义和用法 mysqli_next_result() 函数为 mysqli_multi_query() 准备下一个结果集. 语法 mysqli_next_result(connection);   执 ...

  2. 019_linuxC++之_函数模板引入

    (一)首先我们来看非模板程序,函数只是输入不一样的变量就需要构件很多个不一样的函数,那么这样很麻烦,则引入函数模板 int& max(int& a, int& b) { ret ...

  3. IntelliJ IDEA 运行项目的时候提示 Command line is too long 错误

    在 IntelliJ IDEA 项目运行的时候收到了下面的错误提示: Error running 'Application': Command line is too long. Shorten co ...

  4. 虚拟视点demo

    2019年7月16日15:55:11 感觉虚拟视点也是视觉slam里头一个重要的需求和应该实现的功能,但是好像 没看到什么资料. 百度的全景地图,或者有些公司网站上的3d装修效果图,可以用鼠标拖动查看 ...

  5. javascript面向对象 用new创建一个基于原型的javascript对象

    //创建一个类 其实就是个对象 var Student={ name:"robot", height:1.6, run:function(){ console.log(this.n ...

  6. bash脚本中使用选项 getopts

    原文链接 : http://note.youdao.com/noteshare?id=0cf08484c7308c763726e63e9a638ff5&sub=EF6A110E2F3345E6 ...

  7. 怎样用linux命令知道系统是ubuntu还是redhat或者其它的系统?

    1.第一种方法:# lsb_release -aLSB Version:    :core-4.0-ia32:core-4.0-noarch:graphics-4.0-ia32:graphics-4. ...

  8. ps 证件照制作

    自己制作证件照,再通过印鸽等服务打印邮寄,个人感觉还是比较方便实惠. 使用ps的定义图案和填充功能(ps精简版) 定义图案 1,打开1寸照片 2,图像=>图像大小,可选去掉约束比例 1寸:2.5 ...

  9. Turtle库画小猫咪

    视频请点击这里哟 这个是用python库画的小猫咪,前面一步步的画整个猫的整个身体,具体步骤都写在了注释之中.身体部分画的比较快,后面画了5个心,由于画心的时候要改变好多度数,而且每次只前进一点点,所 ...

  10. webpack入门-配置项

    一.常用配置 1.enter(表示入口,webpack从此处开始构建) 2.output(配置输出结果) 3.module(关于模块的配置,内部可以配置loader) 4.resolve(配置寻找模块 ...