이 기사의 예에서는 JS CSS로 달성한 아름다운 드롭다운 목록 상자 효과를 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 내용은 다음과 같습니다.
JS CSS로 미화된 드롭다운 목록은 효과는 매우 좋지만 코드가 너무 과합니다. CSS를 배우는 친구들은 방법을 배우고 스스로 몇 가지를 변경하여 코드를 단순화할 수 있습니다.
작동 효과는 아래와 같습니다.
구체적인 코드는 다음과 같습니다.
<!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=gb2312" /> <title>JS+CSS下拉列表</title> <style type="text/css"> body{ font-size:12px; margin:0 } .center{ margin-left:auto; margin-right:auto; margin-top:200px; width:300px;} #age_sel_2 div.tag_select{display:block;color:#000;width:62px;height:22px;background:transparent url("http://files.jb51.net/file_images/article/201508/2015811145849095.gif") no-repeat 0 0;padding:0 10px;line-height:22px;} #age_sel_2 div.tag_select_hover{display:block;color:#000;width:62px;height:22px;background:transparent url("http://files.jb51.net/file_images/article/201508/2015811145849095.gif") no-repeat 0 -22px;padding:0 10px;line-height:22px;} #age_sel_2 div.tag_select_open{display:block;color:#000;width:62px;height:22px;background:transparent url("http://files.jb51.net/file_images/article/201508/2015811145849095.gif") no-repeat 0 -44px;padding:0 10px;line-height:22px;} #age_sel_2 ul.tag_options{position:absolute;margin:0;list-style:none;background:transparent url("http://files.jb51.net/file_images/article/201508/2015811145849095.gif") no-repeat left bottom;padding:0 0 1px;margin:0;width:60px;} #age_sel_2 ul.tag_options li{background:transparent url("http://files.jb51.net/file_images/article/201508/2015811145849095.gif") repeat-y -102px 0;display:block;width:61px;padding:0 10px;height:22px;text-decoration:none;line-height:22px;color:#000;} #age_sel_2 ul.tag_options li.open_hover{background:transparent url("http://files.jb51.net/file_images/article/201508/2015811145849095.gif") no-repeat 0 -88px;color:#000} #age_sel_2 ul.tag_options li.open_selected{background:transparent url("http://files.jb51.net/file_images/article/201508/2015811145849095.gif") no-repeat 0 -66px;color:#19555F} </style> <script> var selects = document.getElementsByTagName('select'); var isIE = (document.all && window.ActiveXObject && !window.opera) ? true : false; function $(id) { return document.getElementById(id); } function stopBubbling (ev) { ev.stopPropagation(); } function rSelects() { for (i=0;i<selects.length;i++){ selects[i].style.display = 'none'; select_tag = document.createElement('div'); select_tag.id = 'select_' + selects[i].name; select_tag.className = 'select_box'; selects[i].parentNode.insertBefore(select_tag,selects[i]); select_info = document.createElement('div'); select_info.id = 'select_info_' + selects[i].name; select_info.className='tag_select'; select_info.style.cursor='pointer'; select_tag.appendChild(select_info); select_ul = document.createElement('ul'); select_ul.id = 'options_' + selects[i].name; select_ul.className = 'tag_options'; select_ul.style.position='absolute'; select_ul.style.display='none'; select_ul.style.zIndex='999'; select_tag.appendChild(select_ul); rOptions(i,selects[i].name); mouseSelects(selects[i].name); if (isIE){ selects[i].onclick = new Function("clickLabels3('"+selects[i].name+"');window.event.cancelBubble = true;"); } else if(!isIE){ selects[i].onclick = new Function("clickLabels3('"+selects[i].name+"')"); selects[i].addEventListener("click", stopBubbling, false); } } } function rOptions(i, name) { var options = selects[i].getElementsByTagName('option'); var options_ul = 'options_' + name; for (n=0;n<selects[i].options.length;n++){ option_li = document.createElement('li'); option_li.style.cursor='pointer'; option_li.className='open'; $(options_ul).appendChild(option_li); option_text = document.createTextNode(selects[i].options[n].text); option_li.appendChild(option_text); option_selected = selects[i].options[n].selected; if(option_selected){ option_li.className='open_selected'; option_li.id='selected_' + name; $('select_info_' + name).appendChild(document.createTextNode(option_li.innerHTML)); } option_li.onmouseover = function(){ this.className='open_hover';} option_li.onmouseout = function(){ if(this.id=='selected_' + name){ this.className='open_selected'; } else { this.className='open'; } } option_li.onclick = new Function("clickOptions("+i+","+n+",'"+selects[i].name+"')"); } } function mouseSelects(name){ var sincn = 'select_info_' + name; $(sincn).onmouseover = function(){ if(this.className=='tag_select') this.className='tag_select_hover'; } $(sincn).onmouseout = function(){ if(this.className=='tag_select_hover') this.className='tag_select'; } if (isIE){ $(sincn).onclick = new Function("clickSelects('"+name+"');window.event.cancelBubble = true;"); } else if(!isIE){ $(sincn).onclick = new Function("clickSelects('"+name+"');"); $('select_info_' +name).addEventListener("click", stopBubbling, false); } } function clickSelects(name){ var sincn = 'select_info_' + name; var sinul = 'options_' + name; for (i=0;i<selects.length;i++){ if(selects[i].name == name){ if( $(sincn).className =='tag_select_hover'){ $(sincn).className ='tag_select_open'; $(sinul).style.display = ''; } else if( $(sincn).className =='tag_select_open'){ $(sincn).className = 'tag_select_hover'; $(sinul).style.display = 'none'; } } else{ $('select_info_' + selects[i].name).className = 'tag_select'; $('options_' + selects[i].name).style.display = 'none'; } } } function clickOptions(i, n, name){ var li = $('options_' + name).getElementsByTagName('li'); $('selected_' + name).className='open'; $('selected_' + name).id=''; li[n].id='selected_' + name; li[n].className='open_hover'; $('select_' + name).removeChild($('select_info_' + name)); select_info = document.createElement('div'); select_info.id = 'select_info_' + name; select_info.className='tag_select'; select_info.style.cursor='pointer'; $('options_' + name).parentNode.insertBefore(select_info,$('options_' + name)); mouseSelects(name); $('select_info_' + name).appendChild(document.createTextNode(li[n].innerHTML)); $( 'options_' + name ).style.display = 'none' ; $( 'select_info_' + name ).className = 'tag_select'; selects[i].options[n].selected = 'selected'; } window.onload = function(e) { bodyclick = document.getElementsByTagName('body').item(0); rSelects(); bodyclick.onclick = function(){ for (i=0;i<selects.length;i++){ $('select_info_' + selects[i].name).className = 'tag_select'; $('options_' + selects[i].name).style.display = 'none'; } } }</script> </head> <body> <div class="center"> <div id="age_sel_2"> <select name="area_selet2" id="area_select2"> <option value="请选择">请选择</option> <option value="ASP" >ASP</option> <option value="PHP" >PHP</option> <option value=".NET" >.NET</option> <option value="Csharp" >Csharp</option> <option value="Delphi" >Delphi</option> <option value="Java" >Java</option> </select> </div> </div> </body> </html>
이 기사가 모든 사람의 JavaScript 프로그래밍 설계에 도움이 되기를 바랍니다.