先上效果:

   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. Codeforces Round #586 (Div. 1 + Div. 2) D. Alex and Julian

    链接: https://codeforces.com/contest/1220/problem/D 题意: Boy Dima gave Julian a birthday present - set ...

  2. httpClient请求响应延迟

    客户端可以先向服务器端发送一个请求,如果服务器端返回的是状态码100,那么客户端就可以继续把请求体的数据发送给服务器端.这样在某些情况下可以减少网络开销. 再看看HttpClient里面对100-Co ...

  3. springboot2.0入门(二)-- 基础项目构建+插件的使用

    一.idea中新建第一个HelloWorld项目 点击next: 下一步 在这里可以选择我们需要依赖的第三方软件类库,包括spring-boot-web,mysql驱动,mybatis等.我们这里暂时 ...

  4. HDU 5734 Acperience ( 数学公式推导、一元二次方程 )

    题目链接 题意 : 给出 n 维向量 W.要你构造一个 n 维向量 B = ( b1.b2.b3 ..... ) ( bi ∈ { +1, -1 } ) .然后求出对于一个常数 α > 0 使得 ...

  5. pwn学习日记Day5 基础知识积累

    知识杂项 int mprotect(const void *start, size_t len, int prot); mprotect()函数把自start开始的.长度为len的内存区的保护属性修改 ...

  6. LeetCode 101. 对称二叉树(Symmetric Tree)

    题目描述 给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [1,2,2,null, ...

  7. postgresql 字符串转整数 int、integer

    --把'1234'转成整数 select cast('1234' as integer ) ; --用substring截取字符串,从第8个字符开始截取2个字符:结果是12 select cast(s ...

  8. P4124 [CQOI2016]手机号码

    P4124 [CQOI2016]手机号码 题解 数位DP   DFS  虽然套路,但还是恶心到找不到锅在哪里 注意这个 然后你就发现其实这样就不用记录前导0了 锅在这个鬼地方QAQ 代码 #inclu ...

  9. js 时间戳格式化日期格式

    时间戳转换为日期,网上搜了好几个或多或少都有点问题,自己整理了一下,写了个方法 console.log(formatDate(1565280000000)) 输出: 2019-08-09 00:00: ...

  10. selenium死活定位不到元素以及radio单选框点击不生效

    今天操作一个单选框浪费太多时间,现在其实很简单得东西,记录一下: 1,问题一,定位不到 如图,使用selenium IDE和xpath helper都试过,无法成功定位到这个单选框,实际上是因为,这个 ...