有時,咱們須要在網頁上使用軟鍵盤。今天,就給你們帶來一個基於jQuery的數字鍵盤插件,除了jQuery,不須要依賴任何文件資源。純數字鍵盤,有退格,有清除,不支持輸入小數(須要的能夠本身改一下,主要是多個小數點就有13個鍵,很差排列了,呵呵)。支持鼠標拖動和觸摸拖動,可關閉。css
在線演示html
1.頁面代碼web
<ul> <li><input type="text" placeholder="手機號碼後四位" id="numkeyboard1" class="numkeyboard" /></li> <li><input type="text" placeholder="開箱密碼" id="numkeyboard2" class="numkeyboard"/></li> <button type="submit" class="numkeyboard" value="querun">確 認</button> </ul>
很簡單吧,下面看看調用app
$(".numkeyboard").numkeyboard({ keyboardRadix:1000,//鍵盤大小基數 mainbackground:'#C8BFE7', //主背景色 menubackground:'#4A81B0', //頭背景色 exitbackground:'#4376A0', //關閉按鈕背景色 buttonbackground:'#ff730e', //鍵盤背景色 clickeve:true//是否綁定元素click事件 });
效果截圖:dom
參數說明:keyboardRadix:設置鍵盤大小,默認1000。當值爲1000時,實際大小爲600X500。keyboardRadix最小爲300;clickeve:設置是否綁定元素的click事件,若是爲true,則綁定click事件,即單擊click時也能夠達到onfocus的效果。默認只綁定元素的onfocus事件。this
爲了使用簡單,因此css樣式控制純由js完成,美觀上就不能強求了。若是要想漂亮,建議用css控制樣式,js操做樣式太蛋疼了。這是我之前看到過的一個純CSS3鍵盤,你們能夠看看,很漂亮的,有須要的能夠參照一下。源代碼查看spa
2.js代碼插件
/* * numkeyboard 1.0 * Copyright (c) 2014 BowenLuo http://www.luobo.com/ * Date: 2014-06-08 * Example:$(".numkeyboard").numkeyboard(); */ (function($){ $.fn.numkeyboard = function(options){ var defaults = { keyboardRadix:1000,//鍵盤大小基數 mainbackground:'#C8BFE7', //主背景色 menubackground:'#4A81B0', //頭背景色 exitbackground:'#4376A0', //關閉按鈕背景色 buttonbackground:'#ff730e', //鍵盤按鈕背景色 clickeve:false//是否綁定元素click事件 } var options = $.extend(defaults, options); var keyboardRadix = options.keyboardRadix; if(keyboardRadix<300){ keyboardRadix=300; } var numkeyboardcount = 0; var activeinputele; this.each(function(){ numkeyboardcount++; //添加惟一的數字鍵盤 if(numkeyboardcount<2){ keyBoardId = randomOnlyId(); $("body").append("<div id='"+keyBoardId+"' class='auth_keybord'>" +"<div id='auth_keybord_exit' class='auth_keybord_exit'>關閉</div>" +"<div id='auth_keybord_menu' class='auth_keybord_menu'></div>" +"<ul class='number_list' id='number_list'>" +"<li><button type='button'>7</button></li>" +"<li><button type='button'>8</button></li>" +"<li><button type='button'>9</button></li>" +"<li><button type='button'>4</button></li>" +"<li><button type='button'>5</button></li>" +"<li><button type='button'>6</button></li>" +"<li><button type='button'>1</button></li>" +"<li><button type='button'>2</button></li>" +"<li><button type='button'>3</button></li>" +"<li><button type='button'>0</button></li>" +"<li><button type='submit'>清除</button></li>" +"<li><button type='submit'>退格</button></li>" +"</ul></div>"); } //元素選擇器 var inputele = $(this); var keyboard = $("#"+keyBoardId+""); var keyboard_exit = keyboard.children('div:first'); var keyboard_menu = keyboard.children('div:eq(1)'); var keyboard_buttonul = keyboard.find('ul:first'); var keyboard_buttonli = keyboard_buttonul.children('li'); var keyboard_button = keyboard_buttonli.children('button'); //元素css樣式控制 keyboard.css({"position":"absolute","z-index":"10","display":"none","background":options.mainbackground,overflow:"hidden", "width":keyboardRadix*0.6,"height":keyboardRadix*0.5,"border-radius":keyboardRadix*0.01}); keyboard_exit.css({"position":"absolute","z-index":"1","right":"0","background":options.exitbackground,"cursor":"pointer","text-align":"center", "width":keyboardRadix*0.16,"height":keyboardRadix*0.081,"border-top-right-radius":keyboardRadix*0.01,"line-height":keyboardRadix*0.081+"px", "font-family":"'微軟雅黑',arial","font-size":keyboardRadix*0.036+"px","corlor":"#000","letter-spacing":keyboardRadix*0.005}); keyboard_menu.css({position:"relative",background:options.menubackground,cursor:"move",margin:"auto", width:keyboardRadix*0.6,height:keyboardRadix*0.081,"border-top-left-radius":keyboardRadix*0.01,"border-top-right-radius":keyboardRadix*0.01}); keyboard_buttonul.css({position:"relative",margin:"auto","margin-top":keyboardRadix*0.03+"px",width:keyboardRadix*0.54,height:keyboardRadix*0.37}); keyboard_buttonli.css({position:"relative",margin:"auto",overflow:"hidden","float":"left",width:keyboardRadix*0.18,height:keyboardRadix*0.09}); var buttonborder = String(keyboardRadix*0.001+"px solid "+options.buttonbackground); keyboard_button.css({"position":"relative","float":"left", padding: "0","cursor":"pointer","background":options.buttonbackground,"text-align":"center", "width":keyboardRadix*0.16,"height":keyboardRadix*0.08,"border-radius":keyboardRadix*0.004,border:buttonborder, "line-height":keyboardRadix*0.08+"px",margin:"0 0 0 "+keyboardRadix*0.01+"px", "font-family":"'微軟雅黑',arial","font-size":keyboardRadix*0.032+"px","color":"#fff"}); keyboard_button.mousedown(function(event){ $(this).css({background:"#666",top:"2px"}); event.preventDefault(); }).mouseup(function(){ $(this).css({background:options.buttonbackground,top:"0"}); }); keyboard_exit.click(function(){ exit(options.clickeve); }); inputele.focus(function(event){ activeinputele = $(this); var p = GetScreenPosition(this); if(keyboard.css("display")=="none"){ keyboard.css({"display":"block","left":p.x,"top":p.y+$(this).height()*1.2}); mouseDrag(); touchDrag(); }}); if(options.clickeve){ inputele.click(function(){ activeinputele = $(this); var p = GetScreenPosition(this); if(keyboard.css("display")=="none"){ keyboard.css({"display":"block","left":p.x,"top":p.y+$(this).height()*1.2}); mouseDrag(); touchDrag(); }}); } if(numkeyboardcount<2){ for(var i=0;i<keyboard_button.length;i++){ numbuttonclick(i); } } function randomOnlyId(){ var tempRandom = String(Date.now()); var tempRandomLength = tempRandom.length; tempRandom = tempRandom.substring(tempRandomLength-5,tempRandomLength-1); var randomId = "auth_keybord"+tempRandom; if($("#randomId").length>0){ randomOnlyId() }else{ return randomId; } } function getElem(id) { return document.getElementById(id); } function numbuttonclick(buttonnum){ keyboard_buttonli.children('button:eq('+buttonnum+')').click(function(e){ var buttontext = keyboard_buttonli.children('button:eq('+buttonnum+')').text(); if(buttontext/1){ clickkey(buttontext/1); }else{ if(buttontext=="0"){ clickkey(0); } if(buttontext=="退格"){ backspace(); } if(buttontext=="清除"){ keyclear(); } } }) } function keyclear(){ activeinputele.val(""); } function backspace(){ var inputtext = activeinputele.val(); if(inputtext.length>0){ inputtext = inputtext.substring(0,inputtext.length-1); activeinputele.val(inputtext); } } function clickkey(num){ var inputtext = activeinputele.val(); inputtext = inputtext+num; activeinputele.val(inputtext); } function exit(){ keyboard.css({"display":"none"}); } function GetScreenPosition(object) { var position = {}; position.x = object.offsetLeft; position.y = object.offsetTop; while (object.offsetParent) { position.x = position.x + object.offsetParent.offsetLeft; position.y = position.y + object.offsetParent.offsetTop; if (object == document.getElementsByTagName("body")[0]) { break; } else{ object = object.offsetParent; } } return position; } function mouseDrag() { var moveEle = keyboard; var eventEle = keyboard_menu; var stx = etx = curX = sty = ety = curY = 0; var MAction = false; var eleLeft = +moveEle.css("left").split('px')[0]; var eleTop = +moveEle.css("top").split('px')[0]; eventEle.mousedown(function(event){ MAction = true; stx = event.pageX; sty = event.pageY; eleLeft = +moveEle.css("left").split('px')[0]; eleTop = +moveEle.css("top").split('px')[0]; event.preventDefault(); }).mousemove(function(event){ if(MAction){ var curX = event.pageX-stx; var curY = event.pageY-sty; moveEle.css({"left":eleLeft+curX,"top":eleTop+curY}); event.preventDefault(); }}); $("body").mouseup(function(event){ stx = etx = curX = sty = ety = curY = 0; MAction = false; }); } function touchDrag() { var moveEle = keyboard; var eventEle = keyboard_menu; var stx = sty = etx = ety = curX = curY = 0; var TAction = false; var eleLeft = +moveEle.css("left").split('px')[0]; var eleTop = +moveEle.css("top").split('px')[0]; eventEle.on("touchstart", function(event) { //touchstart var event = event.originalEvent; TAction = true; curX = curY = 0; // 元素當前位置 eleLeft = +moveEle.css("left").split('px')[0]; eleTop = +moveEle.css("top").split('px')[0]; // 手指位置 stx = event.touches[0].pageX; sty = event.touches[0].pageY; }); eventEle.on("touchmove", function(event) { if(TAction){ var event = event.originalEvent; event.preventDefault(); curX = event.touches[0].pageX - stx; curY = event.touches[0].pageY - sty; //alert(eleLeft+"-"+gundongX); moveEle.css({"left":eleLeft+curX,"top":eleTop+curY}); } }); eventEle.on("touchend", function(event) { stx = etx = curX = sty = ety = curY = 0; MAction = false; }); function getT3d(elem, ename) { var elem = elem[0]; var str1 = elem.style.webkitTransform; if (str1 == "") return "0"; str1 = str1.replace("translate3d(", ""); str1 = str1.replace(")", ""); var carr = str1.split(","); if (ename == "x") return carr[0]; else if (ename == "y") return carr[1]; else if (ename == "z") return carr[2]; else return ""; } } }); }; })(jQuery);