简易的键盘 只需要此js文件和jQuery.js 就可以实现

65 篇文章 1 订阅
25 篇文章 0 订阅

效果:

 

keys.js

/**
 * 简易的键盘 只需要此js文件和jQuery.js 就可以实现
 * @param $
 */
/*******************************************************************************
 * * 页面样式
 * <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>
 * 
 * 
 * 页面调用 $(".numkeyboard").numkeyboard({ keyboardRadix:1000,//键盘大小基数
 * mainbackground:'#C8BFE7', //主背景色 menubackground:'#4A81B0', //头背景色
 * exitbackground:'#4376A0', //关闭按钮背景色 buttonbackground:'#ff730e', //键盘背景色
 * clickeve:true//是否绑定元素click事件 });
 ******************************************************************************/
(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'>1</button></li>"
												+ "<li><button type='button'>2</button></li>"
												+ "<li><button type='button'>3</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'>7</button></li>"
												+ "<li><button type='button'>8</button></li>"
												+ "<li><button type='button'>9</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.42,
//						"height" : "320px",
						"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,
//								"left" : "30%",
								"top" : p.y + $(this).height() * 1.2
//								"top" :"20%"
							});
							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,
//									"left" : "30%",
									"top" : p.y + $(this).height() * 1.2
//									"top" :"20%"
									
								});
								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("");
						exit();
					}
					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);

 

jsp页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>小键盘</title>
   
	<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
	<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>

	<script src="ky.js"></script>
    
</head>
<body>


<input style="width: 600px;height:60px;font-size: 30px;line-height: 50px;outline: medium;border:
 none;text-align: center;margin-right: 30px;" type="text" id="phone" name="" placeholder="请输入手机号"  size="22" value = "">
<script>
        $(function () {
			$("#phone").numkeyboard({
		    keyboardRadix:810,//键盘大小基数
		    mainbackground:'#fff', //主背景色
		    menubackground:'rgba(200,191,231,0.31)', //头背景色
		    exitbackground:'rgba(200,191,231,0.31)', //关闭按钮背景色
		    buttonbackground:'rgba(228,52,55,0.78)', //键盘背景色
		    clickeve:true//是否绑定元素click事件
		});
        })
    </script>
 </body>
</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值