JavaScript实现下拉菜单(鼠标、键盘操作)
2014-06-16 16:55
399 查看
今天在《JavaScript基础教程》中看到的一个例子。效果如下图:
功能:
①显示菜单;
②键盘Tab(选择)+Enter(click)键,选择和展开菜单;
③鼠标移动到链接上时,菜单展开,当鼠标离开展开菜单和链接时,关闭菜单
首先是HTML文件:
CSS设置文件:
JavaScript文件:
除了上面的注释,再分析下这段js代码:
①javascript的函数中,并不要求传递的参数个数和函数中定义的一样;
②隐藏和显示菜单的方法:
先得到style属性--x=document.getElementById(y.className).style;
隐藏:x.display='none';显示:x.display='block';
③本文中对浏览器差异,处理的三种传递参数的情况:
1.当浏览器是IE并通过鼠标触发toggleMenu()时,不传递参数<2
2.当浏览器不是IE并通过鼠标触发toggleMenu()时,传递一个参数(event对象)<2
上面两种情况需要下面的方式,获得被点击的菜单名
var currMenu = this.href;
3.当通过clickHandler()调用toggleMenu()时,传递两个参数(event对象和菜单名)
功能:
①显示菜单;
②键盘Tab(选择)+Enter(click)键,选择和展开菜单;
③鼠标移动到链接上时,菜单展开,当鼠标离开展开菜单和链接时,关闭菜单
首先是HTML文件:
<!DOCTYPE html> <html> <head> <title>Shakespeare's Plays</title> <link rel="stylesheet" href="script03.css"> <script src="script03.js"></script> </head> <body> <h1>Shakespeare's Plays</h1> <div><span style="white-space:pre"> </span>//注意div里的内容 <a href="menu1.html" class="menuLink">Comedies</a> <ul class="menu" id="menu1"> <li><a href="pg1.html">All's Well That Ends Well</a></li> <li><a href="pg2.html">As You Like It</a></li> <li><a href="pg3.html">Love's Labour's Lost</a></li> <li><a href="pg4.html">The Comedy of Errors</a></li> </ul> </div> <div> <a href="menu2.html" class="menuLink">Tragedies</a> <ul class="menu" id="menu2"> <li><a href="pg5.html">Anthony & Cleopatra</a></li> <li><a href="pg6.html">Hamlet</a></li> <li><a href="pg7.html">Romeo & Juliet</a></li> </ul> </div> <div> <a href="menu3.html" class="menuLink">Histories</a> <ul class="menu" id="menu3"> <li><a href="pg8.html">Henry IV, Part 1</a></li> <li><a href="pg9.html">Henry IV, Part 2</a></li> </ul> </div> </body> </html>
CSS设置文件:
body { background-color: #FFF; color: #000; } div { margin-bottom: 10px; width: 20em; background-color: #9CF; float: left;<span style="white-space:pre"> //把垂直菜单转换为水平菜单 } ul.menu { display: none; list-style-type: none; margin: 0; padding: 0; } ul.menu li { font: 1em arial, helvetica, sans-serif; padding-left: 10px; } a.menuLink, li a { text-decoration: none; color: #006; } a.menuLink { font-size: 1.2em; font-weight: bold; } ul.menu li a:hover { background-color: #006; color: #FFF; padding-right: 10px; }
JavaScript文件:
window.onload = initAll; function initAll() { var allLinks = document.getElementsByTagName("a"); //创建包含页面上所有链接的数组 for (var i=0; i<allLinks.length; i++) { if (allLinks[i].className.indexOf("menuLink") > -1) { //找到"class=menuLink"的链接 allLinks[i].onmouseover = toggleMenu; //鼠标指针于其上时,调用toggleMenu allLinks[i].onclick = clickHandler; //鼠标或键盘点击时,调用clickHandler } } } function clickHandler(evt) { //处理不同浏览器在事件传递方面的差异 if (evt) { if (typeof evt.target == "string") { toggleMenu(evt,evt.target); } else { toggleMenu(evt,evt.target.toString()); } } else { toggleMenu(evt,window.event.srcElement.href); //传递伪evt对象和IE存储目标值的位置(菜单) } return false; } function toggleMenu(evt,currMenu) { if (toggleMenu.arguments.length < 2) { var currMenu = this.href; //若参数个数为0或1,得到键盘或鼠标点击目标的href(菜单名)--分析③ } var startMenu = currMenu.lastIndexOf("/")+1; var stopMenu = currMenu.lastIndexOf("."); var thisMenuName = currMenu.substring(startMenu,stopMenu); //menu1(2、3).html取出menu1(2、3) var thisMenu = document.getElementById(thisMenuName); thisMenu.style.display = "block"; thisMenu.parentNode.className = thisMenuName; //获得当前链接的父元素div,并将其class赋值为menu1或者menu2、menu3 thisMenu.parentNode.onmouseout = function() { //鼠标指针离开div区域(区域内容看HTML文件) document.getElementById(this.className).style.display = "none"; } thisMenu.parentNode.onmouseover = function() { //指针在div内 document.getElementById(this.className).style.display = "block"; } }
除了上面的注释,再分析下这段js代码:
①javascript的函数中,并不要求传递的参数个数和函数中定义的一样;
②隐藏和显示菜单的方法:
先得到style属性--x=document.getElementById(y.className).style;
隐藏:x.display='none';显示:x.display='block';
③本文中对浏览器差异,处理的三种传递参数的情况:
1.当浏览器是IE并通过鼠标触发toggleMenu()时,不传递参数<2
2.当浏览器不是IE并通过鼠标触发toggleMenu()时,传递一个参数(event对象)<2
上面两种情况需要下面的方式,获得被点击的菜单名
var currMenu = this.href;
3.当通过clickHandler()调用toggleMenu()时,传递两个参数(event对象和菜单名)
相关文章推荐
- Control Study -> 键盘模拟鼠标(实现用键盘操作鼠标光标)(示例代码下载)
- opencv 中通过鼠标和键盘操作实现图像的平移
- Javascript实现鼠标框选操作 不是点击选取
- Python实现监控键盘鼠标操作示例【基于pyHook与pythoncom模块】
- java实现简单的模拟键盘鼠标操作
- 实现鼠标和键盘操作的类
- 文字或图片跟随鼠标移动或键盘控制图片移动实例(javascript实现)
- Javascript实现图片位置控制(鼠标拖拽 + 键盘方向键移动)源码分享
- JavaScript实现禁用键盘和鼠标的点击事件
- Python使用pyautogui模块实现自动化鼠标和键盘操作示例
- 键盘操作代替鼠标,实现WordPress翻页
- 键盘模拟鼠标(实现用键盘操作鼠标光标)(示例代码下载)
- Control Study -> 键盘模拟鼠标(实现用键盘操作鼠标光标)(示例代码下载)
- Javascript实现鼠标框选操作 不是点击选取
- 实现键盘操作鼠标的简单程序
- qtp录制鼠标右键单击事件要通过模拟键盘操作来实现
- 使用jsonp跨域调用百度js实现搜索框智能提示,并实现鼠标和键盘对弹出框里候选词的操作【附源码和在线测试地址】
- JavaScript实现键盘操作页面跳转
- web 实现5分钟 鼠标键盘无操作,自动退出登陆
- 使用jsonp跨域调用百度js实现搜索框智能提示,并实现鼠标和键盘对弹出框里候选词的操作【附源码和在线测试地址】