jQuery 虚拟数字键盘代码
先上效果:

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 虚拟数字键盘代码的更多相关文章
- 基于jQuery的数字键盘插件
有时,我们需要在网页上使用软键盘.今天,就给大家带来一个基于jQuery的数字键盘插件,除了jQuery,不需要依赖任何文件资源.纯数字键盘,有退格,有清除,不支持输入小数(需要的可以自己改一下,主要 ...
- 基于jQuery的软键盘
基于jQuery的软键盘 前些天写了一个基于基于jQuery的数字键盘,今天给大家带来一个基于jQuery的全字母键盘插件(支持全字母大小写切换,数字输入,退格清除,关闭功能,可调整大小和键盘位置 ...
- jQuery动态数字翻滚计数到指定数字的文字特效代码
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 一个数字键盘引发的血案——移动端H5输入框、光标、数字键盘全假套件实现
https://juejin.im/post/5a44c5eef265da432d2868f6 为啥要写假键盘? 还是输入框.光标全假的假键盘? 手机自带的不用非得写个假的,吃饱没事干吧? 装逼?炫技 ...
- 示例:WPF仿制OSK做的系统键盘和数字键盘
原文:示例:WPF仿制OSK做的系统键盘和数字键盘 一.目的:在应用osk.exe系统键盘时遇到很多不方便,比如有些系统调用不出来等问题,由此开发了一个系统键盘仿制osk 二.实现功能 1.目前实现大 ...
- WPF开发经验-实现Win10虚拟触摸键盘
一 引入 项目有个需求,需要实现纯触控操作进行键盘输入.项目部署在Win10系统上,考虑有两种方案来实现. 通过调用Win10自带的触摸键盘来实现: 通过WPF实现一个触摸键盘来实现: 二 调用Win ...
- 手机端访问web调用数字键盘。
转自 http://www.webkfa.com/one4/w1937.html 最近在做手机页面时,遇到数字输入的键盘的问题,之前的做法只是一刀切的使用 type="tel", ...
- jQuery用户数字评分效果
效果预览:http://hovertree.com/texiao/jquery/5.htm HTML文件代码: <!DOCTYPE html> <html xmlns="h ...
- iOS数字键盘自定义按键
UIKeyboardTypeNumberPad 数字键盘自定义按键 最近做一个搜索用户的功能,这里使用了UISearchBar.由于搜索的方式只有手机号码,所以这里的键盘要限制为数字输入,可以这么做: ...
随机推荐
- Codeforces Round #589 (Div. 2) B. Filling the Grid
链接: https://codeforces.com/contest/1228/problem/B 题意: Suppose there is a h×w grid consisting of empt ...
- MySQL基础练习---牛客网的数据以及典型题目
1 部门表departments 部门no和部门名称 2 部门员工表 dept_emp 每个部门对应的员工信息 3 部门经理表 dept_manager 每个部门的经理信息 4 员工表 employe ...
- effective c++ (四)
条款10:令operator=返回一个reference to *this 为了实现“连锁赋值”,赋值操作符必须返回一个reference指向操作符的左侧实参,这是你为classes实现赋值操作符时应 ...
- 利用简单的有限状态机(FSM)来实现一个简单的LED流水灯
有限状态机,(英语:Finite-state machine, FSM),又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型. 有限状态机是指输出取决于过去 ...
- 部署自己的聊天系统 DuckChat(鸭信)
之前在找一款能自己部署的聊天系统,要求含有手机端APP,最好部署过程能简单点的.看了几款稍嫌麻烦,有的还没有app.今天无意间发现了这款DuckChat,开源免费,有手机APP,部署非常简单.直接上传 ...
- MIME协议(一) -- RFC822邮件格式
MIME协议(一) -- RFC822邮件格式 . 如同其他各种电子文档一样,电子邮件内容也必须遵循一定的格式要求,各种邮件处理程序才能从中分析和提取出发件人.收件人.主题和附件等信息.邮件内容的 ...
- 2017 ZSTU寒假排位赛 #4
题目链接:https://vjudge.net/contest/148543#overview. A题:n个罪犯,每个人有一个犯罪值,现在要从里面选出连续的c个人,每个人的犯罪值都不能超过t,问选法的 ...
- shell练习1
题目 把ls -l 的输出按照属主分类,打印每个属住的文件名 ls -l |sed -n '2,$p'| awk ' {hash[$]=hash[$]} END{ for (user in hash) ...
- 预处理、const、static与sizeof-为什么不把所有的函数都定义成内联函数
1:内联是以代码膨胀(复制)为代价的,仅仅省去了函数调用的开销,从而提高函数的执行效率.如果执行函数体内代码的时间相比于函数调用的开销较大,那么效率的收获会很小.另一方面,每一处内联函数的调用都要复制 ...
- 【软件工程】Alpha冲刺(4/6)
链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 恩泽(组长) 过去两天完成了哪些任务 描述 学习调用中国天气网API,接近实现天气推送功能 对天气推送的形式进行讨论及重确 ...