|
|
用层模拟下拉列表框 |
|
|
作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站 |
[支持图片,16x16px(需设定路径),列表框弹出滚动效果支持传值(需设定),自适应宽度,根据最宽的一个选项自动调整,样式、效果基本摹仿select tag。] 大家都知道select的优先权比较高,CSS不宜控制,而且还能遮挡层的正常显示!那么我们就来模拟一个!这样样式就可以随心所欲了 <title>自定义列表框</title> <style> .selectDiv { border: 2px solid inset buttonface;} .optionDiv { border:1px solid black;border-top:0px;position:absolute;cursor:default;clip:rect(auto auto 0% auto);} .optionDiv div { font-size:11px;font-family:Tahoma;padding-left:8px;line-height:160%;background-color:white;} .optionDiv img { vertical-align: middle;margin-right:3px;} .defaultSelect { font-size:11px;font-family:Tahoma;padding-left:6px;border:1px solid white;cursor:default;} .defaultSelect img { vertical-align: middle;margin-right:3px;} .arrow { font-family:webdings;line-height:13px;border:2px outset buttonhighlight;background-color:buttonface;width:15px;text-align:center;cursor:default;font-size:8px;height:18px;} </style> <body> <span id="sel"></span><button style="font-family:Arial;font-size:10px;width:22px;height:18px;margin-top:4px;" onclick="putValue()">Go</button> <SCRIPT LANGUAGE="JavaScript"> //用户变量 var oWhere = document.getElementById("sel"); //显示文字 var OptionText = new Array(); OptionText[0] = "--优秀网站--"; OptionText[1] = "piggydesign.yeah.net"; OptionText[2] = "蓝色理想"; OptionText[3] = "PcHome.net"; OptionText[4] = "Sina.com.cn"; //显示图片 var OptionImg = new Array(); OptionImg[0] = ""; OptionImg[1] = ""; OptionImg[2] = new Image(),OptionImg[2].src="http://www.sayee.com/cloudchen/js/images/blueidea.gif"; OptionImg[3] = new Image(),OptionImg[3].src="http://www.sayee.com/cloudchen/js/images/pchome.gif"; OptionImg[4] = new Image(),OptionImg[4].src="http://www.sayee.com/cloudchen/js/images/sina.gif"; var OptionValue = new Array(); OptionValue[0] = ""; OptionValue[1] = "http://piggydesign.yeah.net"; OptionValue[2] = "http://www.blueidea.com"; OptionValue[3] = "http://www.pchome.net"; OptionValue[4] = "http://www.sina.com.cn"; //系统变量 var selectedOver = false; var selectedValue = 0; //下拉菜单主体 var selectDiv = document.createElement("table"); var selectDivTR = selectDiv.insertRow(); var defaultValueTD = selectDivTR.insertCell(); var arrow = selectDivTR.insertCell(); with(selectDiv)cellSpacing=0,cellPadding=0,border=0,className="selectDiv"; with(defaultValueTD)innerHTML = showOptionImg(1)+OptionText[0],className="defaultSelect"; with(arrow)innerText=6,className="arrow"; oWhere.appendChild(selectDiv); //外层Div var optionDiv = document.createElement("div"); //设置下拉菜单选项的坐标和宽度 with(optionDiv.style) { var select = selectDiv; var xy = getSelectPosition(select); pixelLeft = xy[0]; pixelTop = xy[1]+select.offsetHeight; optionDiv.className = "optionDiv"; } //下拉菜单内容 var Options = new Array(); for (var i=0;i<OptionText.length;i++) { Options[i] = optionDiv.appendChild(document.createElement("div")); } for (i=0;i<Options.length;i++) { Options[i].innerHTML = showOptionImg(i)+OptionText[i]; Options[i].index = i; } oWhere.appendChild(optionDiv); //列表宽度自适应 var SelectWidth = Options[0].offsetWidth+arrow.offsetWidth+8; selectDiv.style.width=SelectWidth;; optionDiv.style.width=SelectWidth; /*事件*/ //禁止选择文本 selectDiv.onselectstart = function() {return false;} optionDiv.onselectstart = function() {return false;} //下拉菜单的箭头 arrow.onmousedown = function() { this.setCapture(); this.style.borderStyle="inset"; } arrow.onmouseup = function() { event.cancelBubble = true; this.style.borderStyle="outset"; this.releaseCapture(); showHide(); } document.onmouseup = function() { optionDiv.style.clip="rect(auto auto 0% auto)"; if(selectedOver) { with(defaultValueTD.style)background="",color=""; selectedOver=false; } } defaultValueTD.onmouseup = function() { event.cancelBubble = true; showHide(); } //移动Option时的动态效果 for (i=0;i<Options.length;i++) { Options[i].attachEvent("onmouseover",function(){moveWithOptions("highlight","white")}); Options[i].attachEvent("onmouseout",function(){moveWithOptions("","")}); Options[i].attachEvent("onmouseup",selectedText); } function moveWithOptions(bg,color) { with(event.srcElement) { style.backgroundColor = bg; style.color = color; } } function selectedText() { event.cancelBubble=true; defaultValueTD.innerHTML = event.srcElement.innerHTML; with(defaultValueTD.style)background="highlight",color="white"; optionDiv.style.clip="rect(auto auto 0% auto)"; selectedOver = true; selectedValue = event.srcElement.index; } i = 0; /*通用函数*/ //获取对象坐标 function getSelectPosition(obj) { var objLeft = obj.offsetLeft; var objTop = obj.offsetTop; var objParent = obj.offsetParent; while (objParent.tagName != "BODY") { objLeft += objParent.offsetLeft; objTop += objParent.offsetTop; objParent = objParent.offsetParent; } return([objLeft,objTop]); } function showOptionImg(index) { var imgSrc = OptionImg[index].src; if (imgSrc!=undefined) return("<img src="+OptionImg[index].src+">") else return(""); } function dynamicOptions() { optionDiv.style.clip="rect(auto auto "+i+"% auto)",i=i+20; if(i<101) setTimeout("dynamicOptions()",5); else i=0; } function showHide() { with(optionDiv.style) { if (clip=="rect(auto auto 0% auto)"||clip=="") dynamicOptions(); else clip="rect(auto auto 0% auto)"; } } function putValue() { var url = OptionValue[selectedValue]; if (url) window.open(url) } </SCRIPT>

|
|
相关文章:相关软件: |
|