JS实现下拉菜单效果

  1 <!doctype html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <title>下拉菜单</title>
  6     <style type="text/css">
  7     body,ul,li{
  8       margin:0;
  9       padding:0;
 10       font-size:13px;
 11     }
 12     ul,li{
 13       list-style:none;
 14     }
 15     #divselect{
 16       width:186px;
 17       margin:80px auto;
 18       position:relative;
 19       z-index:10000;
 20     }
 21     #divselect cite{
 22       width:150px;
 23       height:24px;
 24       line-height:24px;
 25       display:block;
 26       color:#807a62;
 27       cursor:pointer;
 28       font-style:normal;
 29       padding-left:4px;
 30       padding-right:30px;
 31       border:1px solid #333333;
 32     }
 33     #divselect ul{
 34       width:184px;
 35       border:1px solid #333333;
 36       background-color:#ffffff;
 37       position:absolute;
 38       z-index:20000;
 39       margin-top:-1px;
 40       display:none;
 41     }
 42     #divselect ul li{
 43       height:24px;
 44       line-height:24px;
 45     }
 46     #divselect ul li a{
 47       display:block;
 48       height:24px;
 49       color:#333333;
 50       text-decoration:none;
 51       padding-left:10px;
 52       padding-right:10px;
 53     }
 54     </style>
 55   <script type="text/javascript">
 56     window.onload=function(){
 57         var box=document.getElementById(‘divselect‘),
 58             title=box.getElementsByTagName(‘cite‘)[0],
 59             menu=box.getElementsByTagName(‘ul‘)[0],
 60             as=box.getElementsByTagName(‘a‘),
 61           index=-1;
 62
 63       // 点击多选框时显示选项
 64       title.onclick=function(event){
 65         event=event||window.event;
 66         if(menu.style.display==‘block‘){
 67           menu.style.display=‘none‘;
 68           for(var i=0;i<as.length;i++){
 69             as[i].style.backgroundColor=‘#fff‘;
 70           }
 71           index=-1;
 72         }else{
 73           menu.style.display="block";
 74         }
 75         if(event.stopPropagation){
 76           event.stopPropagation();
 77         }
 78         else{
 79           event.cancelBubble=true;
 80         }
 81       }
 82
 83       // 鼠标滑过、离开、点击每个选项时
 84       for(var i=0;i<as.length;i++){
 85           as[i].onmouseover=function(){
 86             for(var j=0;j<as.length;j++){
 87               as[j].style.background=‘#fff‘;
 88             }
 89             this.style.backgroundColor=‘#ccc‘;
 90             for(var j=0;j<as.length;j++){
 91               if(as[j].style.backgroundColor==‘rgb(204, 204, 204)‘){
 92                 index=j;
 93               }
 94             }
 95             console.log(index);
 96           }
 97           as[i].onmouseout=function(){
 98               this.style.backgroundColor=‘#fff‘;
 99           }
100           as[i].onclick=function(){
101               title.innerHTML=this.innerHTML;
102               menu.style.display=‘none‘;
103           }
104       }
105       // 鼠标点击页面空白处时隐藏选项
106       document.onclick=function(){
107           menu.style.display=‘none‘;
108           for(var i=0;i<as.length;i++){
109           as[i].style.backgroundColor=‘#fff‘;
110           }
111           index=-1;
112       }
113
114       //键盘上下切换
115       document.onkeydown=function(event){
116         event=event||window.event;
117         if(menu.style.display==‘block‘){
118           if(event.keyCode==40){
119             index=index+1;
120             if(index>=as.length){
121               index=0;
122             }
123           }
124           else if(event.keyCode==38){
125             index=index-1;
126             if(index<0){
127               index=as.length-1;
128             }
129           }
130           else if(event.keyCode==13){
131             title.innerHTML=as[index].innerHTML;
132             menu.style.display=‘none‘;
133             index=-1;
134           }
135           for(var i=0;i<as.length;i++){
136             as[i].style.backgroundColor=‘#fff‘;
137             }
138           as[index].style.backgroundColor=‘#ccc‘;
139           console.log(index);
140         }
141       }
142     }
143    </script>
144 </head>
145 <body>
146     <div id="divselect">
147       <cite>请选择分类</cite>
148       <ul>
149          <li id="li"><a href="javascript:;" selectid="1">ASP开发</a></li>
150          <li><a href="javascript:;" selectid="2">.NET开发</a></li>
151          <li><a href="javascript:;" selectid="3">PHP开发</a></li>
152          <li><a href="javascript:;" selectid="4">Javascript开发</a></li>
153          <li><a href="javascript:;" selectid="5">Java特效</a></li>
154       </ul>
155     </div>
156 </body>
157 </html>

遇到的问题及注意事项:

1、遍历数组添加事件时,for循环中变量i的问题。

var声明的变量在代码块中没有独立的作用域,遍历添加事件中,如果在事件处理函数中使用了变量i,会出现问题。

解决方法:①使用this代替触发事件的array[i]。②使用let声明函数。

2、if中判定颜色时应使用rgb颜色。

3、DOM0级、DOM2级、IE方法、HTML方法添加事件处理程序的区别。

时间: 2024-11-25 10:14:54

JS实现下拉菜单效果的相关文章

用JS控制下拉菜单效果

今天,突然想复习下之前学习做导航菜单的一些知识.之后觉得下拉菜单非常好玩儿,于是自己试着用JS调出了效果.网上有众多方法,但是感觉不是很对我的胃口,我喜欢HTML/CSS/JavaScript分离着写,用户体验重要,码农审美也很重要啊,O(∩_∩)O~ 在做下拉菜单的过程中,有以下心得: 1.this是个好东西,比如在鼠标事件中,它代表此时的鼠标事件对象本身,免去去用其他方式代表改对象的麻烦: 2.getElementsByTagName或者getElementById方法获得的是一个数组,需要

纯CSS实现的二级下拉菜单效果代码实例

纯CSS实现的二级下拉菜单效果代码实例:二级下拉是最为常用的效果之一,当前的此效果一般哟结合js实现,本章节介绍一个使用纯CSS实现的二级下拉菜单效果,希望能够给需要的朋友带来一定的帮助,不过此代码也有一点浏览器兼容问题,那就是在IE6中不兼容.代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" conten

点击弹出弹性下拉菜单效果

<html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><meta name="keywords" content="站长,网页特效,js特效,广告代码,zzjs,zzjs.net,sky,www.zzjs.net,站长特效 网" /><meta name="

三种方式实现下拉菜单效果

使用3种方式实现下拉菜单效果: html/css .js方法实现下拉菜单显示隐藏.jquery方法实现下拉菜单显示隐藏 先看效果图 第一种:html/css方式实现 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>下拉菜单的实现</title> <style type="text/css"> *{margin

纯css和js版下拉菜单

<!doctype html> <html> <head> <meta charset="utf-8"> <title>css版下拉菜单</title> <style type="text/css"> div,body,ul,li{padding:0;margin:0; list-style:none;} .all{width:550px; height:30px; backgrou

下拉菜单效果

之前为大家介绍过有关HTML中的一些比较炫的效果,本篇为大家介绍一些,大家在网站中经常可以见到的一种下拉菜单效果,这种菜单效果一般分为两层,当我们的鼠标经过一级菜单时,隐藏的二级菜单就会显示出来,这样即保证了页面的美观,同时又不会使页面的模块减少,甚至可以增加模块数目. 一.废话不多说,下面我们来通过HTML+CSS为大家实现一下上面的效果,首先请大家先欣赏一下效果图: 1.界面布局代码: <body> <div id="var"> <ul> <

iOS下拉菜单效果实现

原文链接: iOS下拉菜单效果实现 简书主页:http://www.jianshu.com/users/37f2920f6848 Github主页:https://github.com/MajorLMJ iOS开发者公会-技术1群 QQ群号:87440292 iOS开发者公会-技术2群 QQ群号:232702419 iOS开发者公会-议事区   QQ群号:413102158

div模拟select下拉菜单效果

有些时候select下拉菜单直接用css调整样式,可能会有兼容性的问题,尤其是右侧的下拉三角,很难用css控制,那怎么办呢?可以采用div模拟select下拉菜单的效果.先直接上代码了: HTML的结构如下: <!doctype html> <html> <head> <meta charset="utf-8" /> <title>div模拟下拉菜单特效</title> <style type="t

js模拟下拉菜单-键盘、鼠标(代码详解)

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" con