查看文章 |
颜色选择框(兼容IE firefox)
2008年08月08日 星期五 11:35
颜色选择框(兼容IE firefox) 网上找的,很好用。<script type="text/javascript" language="javascript"> function getEvent() ////event ie and firefox 的兼容问题
{ if(document.all) return window.event;//如果是ie func=getEvent.caller; while(func!=null){ var arg0=func.arguments[0]; if(arg0){if((arg0.constructor==Event || arg0.constructor ==MouseEvent) || (typeof(arg0)=="object" && arg0.preventDefault && arg0.stopPropagation)){return arg0;} } func=func.caller; } return null; } function getElement() //IE下的srcElement 与firefox 的兼容 { var evt=getEvent(); var element=evt.srcElement || evt.target; return element; } function intocolor()
{ var colorpanel=document.getElementById("colorpanel"); var colorTable='' for (i=0;i<2;i++) { for (j=0;j<6;j++) { colorTable=colorTable+'<tr height=12>' colorTable=colorTable+'<td width=11 style="background-color:#000000">' if (i==0){ colorTable=colorTable+'<td width=11 style="background-color:#'+ColorHex[j]+ColorHex[j]+ColorHex[j]+'">'} else{ colorTable=colorTable+'<td width=11 style="background-color:#'+SpColorHex[j]+'">'} colorTable=colorTable+'<td width=11 style="background-color:#000000">' for (k=0;k<3;k++) { for (l=0;l<6;l++) { colorTable=colorTable+'<td width=11 style="background-color:#'+ColorHex[k+i*3]+ColorHex[l]+ColorHex[j]+'">' } } } } colorTable='<table width=253 border="0" cellspacing="0" cellpadding="0" style="border:1px #000000 solid;border-bottom:none;border-collapse: collapse" bordercolor="000000">' +'<tr height=30><td colspan=21 bgcolor=#cccccc>' +'<table cellpadding="0" cellspacing="1" border="0" style="border-collapse: collapse">' +'<tr><td width="3"><td><input type="text" name="DisColor" id="DisColor" size="6" disabled style="border:1px solid #000000;background-color:#ffff00"></td>' +'<td width="3"><td></td></tr></table></td></table>' +'<table border="1" cellspacing="0" cellpadding="0" style="border-collapse: collapse" bordercolor="000000" onmouseover="doOver()" onmouseout="doOut()" onclick="doclick()" style="cursor:pointer;">' +colorTable+'</table>'; colorpanel.innerHTML=colorTable } obj=getElement();
if ((obj.tagName=="TD") && (current!=obj)) { if (current!=null){ current.style.backgroundColor = current._background; } obj._background = obj.style.backgroundColor; var DisColor=document.getElementById("DisColor"); /* var HexColor=document.getElementById("HexColor"); HexColor.value = obj.style.backgroundColor.toUpperCase();*/ DisColor.style.backgroundColor = obj.style.backgroundColor; obj.style.backgroundColor = "white" current =obj } } //将颜色值字母大写
function doOut() { if (current!=null) { current.style.backgroundColor = current._background.toUpperCase(); } } function doclick()
{ obj=getElement(); if (obj.tagName == "TD")
{ var clr = obj._background; clr = clr.toUpperCase(); //将颜色值大写 if (targetElement) { //给目标无件设置颜色值 // targetElement.value = clr; targetElement.style.backgroundColor =color10To16(clr); } DisplayClrDlg(false); return clr; } } --> </script> </head> <body>
<div id="colorpanel" style="position:absolute;display:none;width:253px;height:177px;"></div> 请点击文本框:<input type="text" size="8" alt="clrDlg" style="border:1px solid #000000;background-color:#000000" readonly>
<script type="text/javascript" language="javascript">
<!-- //应用颜色对话框必须注意两点: //颜色对话框 id : colorpanel 不能变 //触发颜色对话框显示的文本框(或其它)必须有 alt 属性,且值为 clrDlg(不能忽略大小写) var targetElement = null; //接收颜色对话框返回值的元素
//当点下鼠标时,确定显示还是隐藏颜色对话框
//点击颜色对话框以外其它区域时,让对话框隐藏 //点击颜色对话框色区时,由 doclick 函数来隐藏对话框 function OnDocumentClick() { obj=getElement(); //obj = event.srcElement?event.srcElement:event.target; var srcElement = obj; if (srcElement.alt == "clrDlg") { //显示颜色对话框 targetElement =obj; DisplayClrDlg(true); } else { //是否是在颜色对话框上点击的 while (srcElement && srcElement.id!="colorpanel") { srcElement = srcElement.parentElement; } if (!srcElement) { //不是在颜色对话框上点击的 DisplayClrDlg(false); } } } //显示颜色对话框
//display 决定显示还是隐藏 //自动确定显示位置 function DisplayClrDlg(display)
{ var event=getEvent(); var clrPanel = document.getElementById("colorpanel"); if (display) { var left = document.body.scrollLeft + event.clientX; var top = document.body.scrollTop + event.clientY; if (event.clientX+clrPanel.offsetWidth > document.body.offsetWidth) { //对话框显示在鼠标右方时,会出现遮挡,将其显示在鼠标左方 left -= clrPanel.offsetWidth; } if (event.clientY+clrPanel.offsetHeight > document.offsetHeight) { //对话框显示在鼠标下方时,会出现遮挡,将其显示在鼠标上方 top -= clrPanel.offsetHeight; } clrPanel.style.left = left; clrPanel.style.top = top; clrPanel.style.display = "inline"; } else { clrPanel.style.display = "none"; } } document.body.onclick = function(){
OnDocumentClick(); } intocolor(); function color10To16(color){
if(color.length>7){ var reg=/(\d{1,3})/g; colorarr=color.match(reg); R=lengthTo2(Number(colorarr[0]).toString(16)); G=lengthTo2(Number(colorarr[1]).toString(16)); B=lengthTo2(Number(colorarr[2]).toString(16)); color="#"+R+G+B; color = color.toUpperCase() } return (color); } function lengthTo2(str){ if(str.length<2){ str="0"+str; } return str; } //--> </script> |
最近读者: