可以支持多中格式的JS键盘
可以支持多中格式的JS键盘
发布时间:2016-12-30 来源:查字典编辑
摘要:/**JavaScriptVirtualKeyboard(ATM-stylenumpadvariant),version2.3**Copyr...

/*

*JavaScriptVirtualKeyboard(ATM-stylenumpadvariant),version2.3

*

*Copyright(C)2006-2007DmitriyKhudorozhkov

*

*Thissoftwareisprovided"as-is",withoutanyexpressorimpliedwarranty.

*Innoeventwilltheauthorbeheldliableforanydamagesarisingfromthe

*useofthissoftware.

*

*Permissionisgrantedtoanyonetousethissoftwareforanypurpose,

*includingcommercialapplications,andtoalteritandredistributeit

*freely,subjecttothefollowingrestrictions:

*

*1.Theoriginofthissoftwaremustnotbemisrepresented;youmustnot

*claimthatyouwrotetheoriginalsoftware.Ifyouusethissoftware

*inaproduct,anacknowledgmentintheproductdocumentationwouldbe

*appreciatedbutisnotrequired.

*

*2.Alteredsourceversionsmustbeplainlymarkedassuch,andmustnotbe

*misrepresentedasbeingtheoriginalsoftware.

*

*3.Thisnoticemaynotberemovedoralteredfromanysourcedistribution.

*

*-DmitriyKhudorozhkov,kh_dmitry2001@mail.ru

*/

functionVATMpad(container_id,callback_ref,font_name,font_size,

font_color,bg_color,key_color,border_color,

show_click,click_font_color,click_bg_color,

click_border_color,do_embed)

{

returnthis._construct(container_id,callback_ref,font_name,font_size,

font_color,bg_color,key_color,border_color,

show_click,click_font_color,click_bg_color,

click_border_color,do_embed);

}

VATMpad.prototype={

kbArray:[],

_setup_event:function(elem,eventType,handler)

{

return(elem.attachEvent?elem.attachEvent("on"+eventType,handler):((elem.addEventListener)?elem.addEventListener(eventType,handler,false):null));

},

_start_flash:function(in_el)

{

functiongetColor(str,posOne,posTwo)

{

if(/rgb((d+),s(d+),s(d+))/.exec(str))//trytodetectMozilla-stylergbvalue.

{

switch(posOne)

{

case1:returnparseInt(RegExp.$1,10);

case2:returnparseInt(RegExp.$2,10);

case3:returnparseInt(RegExp.$3,10);

default:return0;

}

}

else//standard(#xxxxxxor#xxx)way

returnstr.length==4?parseInt(str.substr(posOne,1)+str.substr(posOne,1),16):parseInt(str.substr(posTwo,2),16);

}

functiongetR(color_string)

{returngetColor(color_string,1,1);}

functiongetG(color_string)

{returngetColor(color_string,2,3);}

functiongetB(color_string)

{returngetColor(color_string,3,5);}

varel=in_el.time?in_el:(in_el.company&&in_el.company.time?in_el.company:null);

if(el)

{

el.time=0;

clearInterval(el.timer);

}

varvkb=this;

varftc=vkb.fontcolor,bgc=vkb.keycolor,brc=vkb.bordercolor;

//Specialfixesforsimple/dead/modifierkeys:

if(in_el.dead)

ftc=vkb.deadcolor;

if(((in_el.innerHTML=="Shift")&&vkb.Shift)||((in_el.innerHTML=="Caps")&&vkb.Caps)||((in_el.innerHTML=="AltGr")&&vkb.AltGr))

bgc=vkb.lic;

//Extractbasecolorvalues:

varfr=getR(ftc),fg=getG(ftc),fb=getB(ftc);

varkr=getR(bgc),kg=getG(bgc),kb=getB(bgc);

varbr=getR(brc),bg=getG(brc),bb=getB(brc);

//Extractflashcolorvalues:

varf_r=getR(vkb.cfc),f_g=getG(vkb.cfc),f_b=getB(vkb.cfc);

vark_r=getR(vkb.cbg),k_g=getG(vkb.cbg),k_b=getB(vkb.cbg);

varb_r=getR(vkb.cbr),b_g=getG(vkb.cbr),b_b=getB(vkb.cbr);

var_shift_colors=function()

{

functiondec2hex(dec)

{

varhexChars="0123456789ABCDEF";

vara=dec%16;

varb=(dec-a)/16;

returnhexChars.charAt(b)+hexChars.charAt(a)+"";

}

in_el.time=!in_el.time?10:(in_el.time-1);

functioncalc_color(start,end)

{return(end-(in_el.time/10)*(end-start));}

vart_f_r=calc_color(f_r,fr),t_f_g=calc_color(f_g,fg),t_f_b=calc_color(f_b,fb);

vart_k_r=calc_color(k_r,kr),t_k_g=calc_color(k_g,kg),t_k_b=calc_color(k_b,kb);

vart_b_r=calc_color(b_r,br),t_b_g=calc_color(b_g,bg),t_b_b=calc_color(b_b,bb);

in_el.style.color="#"+dec2hex(t_f_r)+dec2hex(t_f_g)+dec2hex(t_f_b);

in_el.style.borderColor="#"+dec2hex(t_b_r)+dec2hex(t_b_g)+dec2hex(t_b_b);

in_el.style.backgroundColor="#"+dec2hex(t_k_r)+dec2hex(t_k_g)+dec2hex(t_k_b);

if(!in_el.time)

{

clearInterval(in_el.timer);

return;

}

};

_shift_colors();

in_el.timer=window.setInterval(_shift_colors,50);

},

_setup_style:function(obj,top,left,width,height,position,border_color,bg_color,line_height,font_size,font_weight,padding_left,padding_right)

{

varos=obj.style;

if(top)os.top=top;

if(left)os.left=left;

if(width)os.width=width;

if(height)os.height=height;

if(position)os.position=position;

if(border_color)os.border="1pxsolid"+border_color;

if(bg_color)os.backgroundColor=bg_color;

os.textAlign="center";

if(line_height)os.lineHeight=line_height;

if(font_size)os.fontSize=font_size;

os.fontWeight=font_weight||"bold";

if(padding_left)os.paddingLeft=padding_left;

if(padding_right)os.paddingRight=padding_right;

},

_setup_key:function(parent,id,top,left,width,height,border_color,bg_color,line_height,font_size,font_weight,padding_left,padding_right)

{

var_id=this.Cntr.id+id;

varexists=document.getElementById(_id);

varkey=exists?exists.parentNode:document.createElement("DIV");

this._setup_style(key,top,left,width,height,"absolute");

varkey_sub=exists||document.createElement("DIV");

key.appendChild(key_sub);parent.appendChild(key);

this._setup_style(key_sub,"","","",line_height,"relative",border_color,bg_color,line_height,font_size,font_weight,padding_left,padding_right);

key_sub.id=_id;

if(!exists)this._setup_event(key_sub,'mousedown',this._generic_callback_proc);

returnkey_sub;

},

_findX:function(obj)

{return(obj&&obj.parentNode)?parseFloat(obj.parentNode.offsetLeft):0;},

_findY:function(obj)

{return(obj&&obj.parentNode)?parseFloat(obj.parentNode.offsetTop):0;},

_findW:function(obj)

{return(obj&&obj.parentNode)?parseFloat(obj.parentNode.offsetWidth):0;},

_findH:function(obj)

{return(obj&&obj.parentNode)?parseFloat(obj.parentNode.offsetHeight):0;},

_construct:function(container_id,callback_ref,font_name,font_size,font_color,bg_color,key_color,

border_color,show_click,click_font_color,click_bg_color,click_border_color,do_embed)

{

varexists=(this.Cntr!=undefined),ct=exists?this.Cntr:document.getElementById(container_id);

varchanged=(font_size&&(font_size!=this.fontsize));

this._Callback=((typeof(callback_ref)=="function")&&((callback_ref.length==1)||(callback_ref.length==2)))?callback_ref:(this._Callback||null);

varff=font_name||this.fontname||"";

varfs=font_size||this.fontsize||"14px";

varfc=font_color||this.fontcolor||"#000";

varbg=bg_color||this.bgcolor||"#FFF";

varkc=key_color||this.keycolor||"#FFF";

varbc=border_color||this.bordercolor||"#777";

this.cfc=click_font_color||this.cfc||"#CC3300";

this.cbg=click_bg_color||this.cbg||"#FF9966";

this.cbr=click_border_color||this.cbr||"#CC3300";

this.sc=(show_click==undefined)?((this.sc==undefined)?false:this.sc):show_click;

this.fontname=ff,this.fontsize=fs,this.fontcolor=fc;

this.bgcolor=bg,this.keycolor=kc,this.bordercolor=bc;

if(!exists)

{

this.Cntr=ct,this.LastKey=null;

VATMpad.prototype.kbArray[container_id]=this;

}

varkb=exists?ct.childNodes[0]:document.createElement("DIV");

if(!exists)

{

ct.appendChild(kb);

ct.style.display="block";

ct.style.zIndex=999;

if(do_embed)

ct.style.position="relative";

else

{

ct.style.position="absolute";

//ManythankstoPeter-PaulKoch(www.quirksmode.org)forthefind-pos-X/find-pos-Ycode.

varinitX=0,ct_=ct;

if(ct_.offsetParent)

{

while(ct_.offsetParent)

{

initX+=ct_.offsetLeft;

ct_=ct_.offsetParent;

}

}

elseif(ct_.x)

initX+=ct_.x;

varinitY=0;ct_=ct;

if(ct_.offsetParent)

{

while(ct_.offsetParent)

{

initY+=ct_.offsetTop;

ct_=ct_.offsetParent;

}

}

elseif(ct_.y)

initY+=ct_.y;

ct.style.top=initY+"px",ct.style.left=initX+"px";

}

kb.style.position="relative";

kb.style.top="0px",kb.style.left="0px";

}

kb.style.border="1pxsolid"+bc;

varkb_main=exists?kb.childNodes[0]:document.createElement("DIV"),ks=kb_main.style;

if(!exists)

{

kb.appendChild(kb_main);

ks.position="relative";

ks.width="1px";

ks.cursor="default";

}

//Disablecontentselection:

this._setup_event(kb_main,"selectstart",function(event){returnfalse;});

this._setup_event(kb_main,"mousedown",function(event){if(event.preventDefault)event.preventDefault();returnfalse;});

ks.fontFamily=ff,ks.backgroundColor=bg;

if(!exists||changed)

{

ks.width=this._create_numpad(container_id,kb_main);

ks.height=(this._findY(this.LastKey)+this._findH(this.LastKey)+1)+"px";

}

returnthis;

},

_create_numpad:function(container_id,parent)

{

varc="center",n="normal";

varfs=this.fontsize,kc=this.keycolor,bc=this.bordercolor;

varmag=parseFloat(fs)/14.0,cell=Math.floor(25.0*mag);

varcp=String(cell)+"px",lh=String(Math.floor(cell-2.0))+"px";

varedge="1px";

varkb_pad_7=this._setup_key(parent,"___pad_7","1px",edge,cp,cp,bc,kc,lh,fs);

kb_pad_7.innerHTML="7";

varedge_1=String(this._findX(kb_pad_7)+this._findW(kb_pad_7)+1)+"px";

varkb_pad_8=this._setup_key(parent,"___pad_8","1px",edge_1,cp,cp,bc,kc,lh,fs);

kb_pad_8.innerHTML="8";

varedge_2=String(this._findX(kb_pad_8)+this._findW(kb_pad_8)+1)+"px";

varkb_pad_9=this._setup_key(parent,"___pad_9","1px",edge_2,cp,cp,bc,kc,lh,fs);

kb_pad_9.innerHTML="9";

varprevH=this._findH(kb_pad_9),edge_Y=(this._findY(kb_pad_9)+prevH+1)+"px";

edge_Y=(this._findY(kb_pad_7)+prevH+1)+"px";

varkb_pad_4=this._setup_key(parent,"___pad_4",edge_Y,edge,cp,cp,bc,kc,lh,fs);

kb_pad_4.innerHTML="4";

varkb_pad_5=this._setup_key(parent,"___pad_5",edge_Y,edge_1,cp,cp,bc,kc,lh,fs);

kb_pad_5.innerHTML="5";

varkb_pad_6=this._setup_key(parent,"___pad_6",edge_Y,edge_2,cp,cp,bc,kc,lh,fs);

kb_pad_6.innerHTML="6";

edge_Y=(this._findY(kb_pad_4)+prevH+1)+"px";

varkb_pad_1=this._setup_key(parent,"___pad_1",edge_Y,edge,cp,cp,bc,kc,lh,fs);

kb_pad_1.innerHTML="1";

varkb_pad_2=this._setup_key(parent,"___pad_2",edge_Y,edge_1,cp,cp,bc,kc,lh,fs);

kb_pad_2.innerHTML="2";

varkb_pad_3=this._setup_key(parent,"___pad_3",edge_Y,edge_2,cp,cp,bc,kc,lh,fs);

kb_pad_3.innerHTML="3";

edge_Y=(this._findY(kb_pad_1)+prevH+1)+"px";

varkb_pad_0=this._setup_key(parent,"___pad_0",edge_Y,edge,cp,cp,bc,kc,lh,fs);

kb_pad_0.innerHTML="0";

varkb_pad_enter=this._setup_key(parent,"___pad_period",edge_Y,edge_1,String(2*cell+1)+"px",cp,bc,kc,lh,parseFloat(fs)*0.9,n);

kb_pad_enter.innerHTML="Enter";

this.LastKey=kb_pad_enter;

returnString(this._findX(kb_pad_9)+this._findW(kb_pad_9)+1)+"px";

},

_generic_callback_proc:function(event)

{

vare=event||window.event;

varin_el=e.srcElement||e.target;

varcontainer_id=in_el.id.substring(0,in_el.id.indexOf("___"));

varvpad=VATMpad.prototype.kbArray[container_id];

if(vpad.sc)vpad._start_flash(in_el);

if(vpad._Callback)vpad._Callback(in_el.innerHTML,vpad.Cntr.id);

},

SetParameters:function()

{

varl=arguments.length;

if(!l||(l%2!=0))returnfalse;

varp0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10;

while(--l>0)

{

varvalue=arguments[l];

switch(arguments[l-1])

{

case"callback":

p0=((typeof(value)=="function")&&((value.length==1)||(value.length==2)))?value:this._Callback;

break;

case"font-name":p1=value;break;

case"font-size":p2=value;break;

case"font-color":p3=value;break;

case"base-color":p4=value;break;

case"key-color":p5=value;break;

case"border-color":p6=value;break;

case"show-click":p7=value;break;

case"click-font-color":p8=value;break;

case"click-key-color":p9=value;break;

case"click-border-color":p10=value;break;

default:break;

}

l-=1;

}

this._construct(this.Cntr.id,p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10);

returntrue;

},

Show:function(value)

{

varct=this.Cntr.style;

ct.display=((value==undefined)||(value==true))?"block":((value==false)?"none":ct.display);

}

};

打包文件下载

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Javascript教程学习
热门Javascript教程学习
编程开发子分类