仿建行网银登陆软键盘

第一次在博客园上发贴子,就以去年自己无聊写的一个软键盘作为处女贴吧。功能都是模仿的,可能部分功能不全请大家见谅。

直接上代码。


HTML代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>仿网银登陆软键盘</title>
</head>
<body>
<div align="center" id="text" >
	<table>
    	<tr>
        	<td>账 号:</td>
        	<td><input type="text" name="name" /></td>
    	</tr>
        <tr>
        	<td>密 码:</td>
    		<td><input type="password" name="pas" id="pas" /><input type="button" value="使用软键盘" onclick="createKeyBoard()"/></td>
        </tr>
     </table>
</div>

 CSS代码

#divone{
    width: 473px; /* 背景色设为蓝色 */*/
    width: 460px\9; /* 背景色设为灰色。仅IE6与IE7可执行 */
    width: 460px\0; /* 背景色设为蓝色,仅IE8认可 */
  height:150px;   cursor:pointer;
} .newTable tr td{
  padding:1px 0 1px 0;
} .blue{
  background-color:#09F;
  border:0px;height:20px;
}
.forSpan{
  margin:0 50px 0 50px;
  color:#FFF;
} #jianpan{
  border:#0FC;
  width:60px;
  height:20px;
} .litteButton{
  margin:0px 0px 0px 2px;   width:26px;   width: 26px\9; /* 背景色设为灰色。仅IE6与IE7可执行 */   width: 26px\0;   height:20px;
  border:1px solid #FF0;
  cursor:pointer;
} .bigButton{
  margin:1px 1px 1px 1px;
  border:1px #FF0 solid;
  cursor:pointer;width:98%;
  height:44px;
  margin:0 1px 0 1px;
}
#firstId{
  width:76%;   width: 78%\9; /* 背景色设为灰色。仅IE6与IE7可执行 */   width: 78%\0;   height:1px; } #thirdId{
  width:19%;   width: 17%\9; /* 背景色设为灰色。仅IE6与IE7可执行 */   width: 17%\0; } #qiehuan{
  margin:0px 0px 0px 2px;
  height:20px;
  border:1px solid #FF0;
  cursor:pointer;
}

 JavaScript

function KeyBoard() {
	this.tag = document.getElementsByName("pas");
	this.passVal;
	this.create = function() {
		var tags = document.getElementById("text");
		var newDiv = document.createElement("div");
		var postion = this.getElementPos(this.tag[0]);
		newDiv.style.position = "absolute";
		newDiv.style.left = postion[0];	
		newDiv.style.top = postion[1];
		newDiv.id = "divone";
		tags.appendChild(newDiv);
		var newTable = document.createElement("table");
		newTable.width = '100%';
		newTable.className = "newTable";
		var tr = document.createElement("tr");
		var td = document.createElement("td");
		td.id = "firstId";
		tr.appendChild(td);	
		td = document.createElement("td");
		td.width = "5%";
		tr.appendChild(td);
		td = document.createElement("td");
		td.id = "thirdId";
		td.height = "1px";
		tr.appendChild(td);
		newTable.appendChild(tr);
		for(var i = 0; i <6 ; i ++) {
			this.addRow(newTable,i);
		}
		newDiv.appendChild(newTable);
		newDiv.outerHTML = newDiv.outerHTML;
	}
	
	this.whatBrowser = function() {
		 if(navigator.userAgent.indexOf("MSIE")>0) {
				return "MSIE";
			}
		if(navigator.userAgent.indexOf("Firefox")>0){
				return "Firefox";
			}
		if(navigator.userAgent.indexOf("Opera")>0){
				return "Opera";
			}
		if(navigator.userAgent.indexOf("Safari")>0) {
				return "Safari";
			}
		if(navigator.userAgent.indexOf("Camino")>0){
				return "Camino";
			}
		if(navigator.userAgent.indexOf("Gecko")>0){
				return "Gecko";
			}
	}
	this.toDisable = function() {
		var tag = document.getElementById("pas");
		tag.readOnly = true;
		tag.value = "";	
	}
	//创建行函数
	this.addRow = function(newTable,sqnm) {
		var tr = document.createElement("tr");
		var td, spTd, input, span;
		var tdArray = new Array();
		var sLen, sBind;		
		var reg = /[^\u4e00-\u9fa5]/;//中文判断
		tr.className = "blue";
		td = document.createElement("td");
		switch(sqnm) {
			case 0:
				td = document.createElement("td");
				td.colSpan = 3;
				td.align = "center";
				span = document.createElement("span");
				span.innerHTML = "欢迎使用软键盘。";
				span.className = "forSpan";
				td.appendChild(span);
				input = document.createElement("input");
				input.type = "button";
				input.id = "jianpan";
				input.value = "使用键盘";
				td.appendChild(input);
				tr.appendChild(td);
				break;
			case 1:
				td.colSpan = 2;
				tdArray = Array("~","!","@","#","$","%","^","&","*","(",")","_","+","|","退格");
				break;
			case 2:
				td.colSpan = 2;
				tdArray = Array("\'","1","2","3","4","5","6","7","8","9","0","-","=","\\");
				break;
			case 3:
				td.colSpan = 3;
				tdArray = Array("q","w","e","r","t","y","u","i","o","p","{","}","[","]","切换大\/小写");
				break;
			case 4:
				tdArray = Array("a","s","d","f","g","h","j","k","l",":","\"",":","\'","确定");
				break;
			case 5:
				tdArray = Array("z","x","c","v","b","n","m","<",">","?",",",".","/");
				break;
		}
		sLen = tdArray.length;
		if(0!=sLen) {	
			for(var i = 0; i < sLen; i++) {
				if(reg.exec(tdArray[i])) {
					if(0 == tdArray[i].indexOf("切")) {
						input = this.createInput(tdArray[i]);
						if("MSIE" == this.whatBrowser()) {
							input.style.width = "76px";
						}
						else {
							input.style.width = "87px";	
						}
						input.className = "";
						input.id = "qiehuan";
						td.appendChild(input);	
					}
					else {	
						input = this.createInput(tdArray[i]);
						td.height = "20px";
						td.appendChild(input);
					}
				}
				else {
					if(0 == tdArray[i].indexOf("退")) {
						spTd = document.createElement("td");
						spTd.rowSpan = 2;
						input = this.createInput(tdArray[i]);
						input.className = "bigButton"
						input.style.height = "44px";
						input.style.width = "98%";
						input.id = "back";
						spTd.appendChild(input);
								
					}
					else if(0 == tdArray[i].indexOf("确")){
						spTd = document.createElement("td");
						spTd.rowSpan = 2;
						spTd.colSpan = 2;
						input = this.createInput(tdArray[i]);
						input.className = "bigButton";
						input.style.width = "98%";
						spTd.appendChild(input);	
					}
				}
			}
			tr.appendChild(td);
			if(undefined!=spTd) {
				tr.appendChild(spTd);	
			}	
		}
		newTable.appendChild(tr);
		//添加绑定事件
	}
	this.addClick = function() {
		var tags = this.getElementsByClassName("litteButton");
		var i = tags.length;
		for(var j = 0; j<i; j++) {
			(function(tag,type){
				if('MSIE'==type) {
					tag.attachEvent("onclick",function(){change(tag.value)});
				}
				else {
					tag.addEventListener("click",function(){change(tag.value)},false);	
				}
			})(tags[j],this.whatBrowser()); 
		}
		
		var backTag = document.getElementById("back");	
		this.jianRong(backTag,backVal);
		var qieTag = document.getElementById("qiehuan");
		this.jianRong(qieTag,qieHuan);
		var jianTag = document.getElementById("jianpan");
		this.jianRong(jianTag,jianPan);
		
	}
	
	this.jianRong = function(tag,fun) {
		if('MSIE'==this.whatBrowser()) {
			tag.attachEvent("onclick",fun);
		}
		else {
			tag.addEventListener("click",fun,false);	
		}
	}
	this.createInput = function(val) {
		var input;
		input = document.createElement("input");
		input.type = "button";
		input.value = val;
		input.style.width = "25px";
		input.className = "litteButton";
		return input;	
	}
	//获取对象方法
	this.getElementsByClassName = function(n) {
		var classElements = [],allElements = document.getElementsByTagName('*');
		for (var i=0; i< allElements.length; i++ )
		{
			if (allElements[i].className == n ) {
				classElements[classElements.length] = allElements[i]; //某类集合
			}
		}
			return classElements;
	}
	//获取对象位置
	this.getElementPos = function(tag) {
		var ua = navigator.userAgent.toLowerCase();
		var isOpera = (ua.indexOf('opera') != -1);
		var isIE = (ua.indexOf('msie') != -1 && !isOpera); // not opera spoof 
		if (tag.parentNode === null || tag.style.display == 'none') {
			return false;
		}
		var parent = null;
		var pos = [];
		var box;
		if (tag.getBoundingClientRect)  
		{
			box = tag.getBoundingClientRect();
			var scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
			var scrollLeft = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);
			pos[0] = box.left + scrollLeft + "px";
			pos[1] = box.bottom +scrollTop + "px";
			return pos;
		}
	}
}
function createKeyBoard() {
	var tag = document.getElementById("divone");
	if(undefined == tag) {
		var s = new KeyBoard;
		s.create();
		s.addClick();
		s.toDisable();
	}
	else {
		return false;	
	}
}
function change(val) {
	var tag = document.getElementById("pas");
	var newVal = tag.value + val;
	tag.value = newVal;	
}

function backVal() {
	var tag = document.getElementById("pas");
	var newVal, valLen;
	valLen = tag.value.length;
	if(0 == valLen) {
		return false;	
	}  
	else {
		newVal = tag.value.substr(0,valLen - 1);
		tag.value = newVal;		
	}
}
function qieHuan() {
	var reg = /[a-z|A-Z]/;
	var Reg = /[a-z]/;
	
	var classElements = [],allElements = document.getElementsByTagName('*');
	for (var i=0; i< allElements.length; i++ )
	{
		if (allElements[i].className == "litteButton" ) {
			classElements[classElements.length] = allElements[i]; //某类集合
		}
	}

	var val;
	var i = classElements.length;
	for(var j = 0; j<i; j++) {
		val = classElements[j].value;
		if(reg.exec(val)) {
			if(!Reg.exec(val)) {
				classElements[j].value = val.toLowerCase (); 
			}
			else {
				classElements[j].value = val.toUpperCase();  	
			}
		}
	}	
}

function jianPan() {
	var tag = document.getElementById("divone");
	tag.parentNode.removeChild(tag);
	var tag = document.getElementById("pas");
	tag.value = "";
	tag.readOnly = false;
}

 源代码都在这,组装后就可以直接使用。如果需要特殊的功能可自行添加。

PS:确认键的功能没有添加,所有点击后没有效果。

最终效果图:

posted @ 2013-06-09 17:28  黄之戀  阅读(249)  评论(1)    收藏  举报