JavaScript实现下拉菜单(鼠标、键盘操作)
来源:互联网 发布:ea自动交易软件 编辑:程序博客网 时间:2024/06/13 22:40
今天在《JavaScript基础教程》中看到的一个例子。效果如下图:
功能:
①显示菜单;
②键盘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;//鼠标指针于其上时,调用toggleMenuallLinks[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、menu3thisMenu.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对象和菜单名)
0 0
- JavaScript实现下拉菜单(鼠标、键盘操作)
- js下拉菜单(鼠标+键盘双操作)
- 实现鼠标点击及键盘控制下拉菜单事件
- JavaScript实现下拉菜单
- Javascript实现透明下拉菜单
- JavaScript 下拉菜单实现代码
- 用JavaScript实现下拉菜单
- javascript-下拉菜单的实现
- bootstrap实现鼠标悬停下拉菜单
- JavaScript操作select下拉菜单全集合
- 纯javascript 下拉按钮菜单插件实现(处理兼容性)
- 鼠标悬停下拉菜单
- 蜗牛—JavaScript学习之鼠标经过下拉菜单
- 实现鼠标和键盘操作的类
- 实现DX游戏的键盘鼠标操作
- 实现键盘操作鼠标的简单程序
- JavaScript实现简单的下拉菜单
- javascript 实现联动的下拉菜单
- java 后台构造http转发请求
- Struts2 之addActionError的使用
- Linux网卡绑定探析
- centos6.5 x86_64安装oracle 11.2.0.3grid
- 一个屌丝程序员对项目测试一些想法
- JavaScript实现下拉菜单(鼠标、键盘操作)
- silent install oracle 11.2.0.1 x86_64 for linux
- android 异步任务的用法详解
- mysql忘记密码怎么办?
- 解决vsftpd的refusing to run with writable root inside chroot错误
- 关于mysql处理百万级以上的数据时如何提高其查询速度的方法
- VB.NET可选参数调用方式解析
- ExtJs layout的七中布局
- HOWTO: Integrating SSH tunneling inside your application