首页 > web前端 > js教程 > 正文

Javascript设计网页中的下拉菜单

黄舟
发布: 2016-12-21 15:24:15
原创
1753人浏览过

  在网页制作时,为了更好地组织信息,使显示的信息分类明确、层次清晰,网页制作者往往费尽心机。常用的方法有用树型结构显示信息,用表格进行网页布局,用框架(frame)组织页面等等。但对于习惯了windows操作系统的用户来说,利用菜单操作可以算是最自然的方法了。下面我们就来看一下怎样在网页中设计下拉式菜单。   下拉式菜单由若干个显示在窗口顶部的主菜单条和各个菜单条下面的子菜单组成。每个子菜单往往还包含几个子菜单项。通常,只有菜单条显示在窗口中,并且当鼠标指针指向菜单条时,菜单条的子菜单才显示出来。当鼠标指针离开菜单时,子菜单则隐藏起来,回到只显示主菜单条的状态。 

  根据上述下拉菜单的特点,我们就可以开始在网页中制作下拉菜单了。我们在网页的顶部放置一个区域,用于显示主菜单条,每一个主菜单条作为一个超链接横向置于该区域中,当然除非菜单项没有子菜单,一般情况下这里的超链接不指向任何地址,只用它来激活子菜单。区域的格式见程序1。 

  <div id='pad' ……> 

  <a id='pad1' onmouseout="mouseout(); hidemenu();" onmouseover="mouseover(); 

  domenu('idpad1');" onclick="window.event.returnvalue=false;">菜单项一</a> 

  <a id='pad2' onmouseout="mouseout(); hidemenu();" onmouseover="mouseover(); 

  domenu('idpad2');" onclick="window.event.returnvalue=false;">菜单项二</a> 

  …… 

  </div>    

  接着,我们根据主菜单条的个数定义相应的子菜单,为每个子菜单定义一个区域,该区域中第一个元素是一条横线,然后每个子菜单作为一个超链接置于该区域中,由于子菜单纵向排列,每个超链接后加<br>换行。当然这个区域现在还不能显示出来,但当它被激活时,其显示位置应位于其他对象之上,所以其style属性置为style=' display:none; z-index:9;'。 注意每个超链接的id均应与其主菜单的id相同,以便于统一处理。格式见程序2。 

  <span id='idpad1' style='display:none; z-index:9;' onmouseout='hidemenu();'> 

   <hr style='position:absolute;left:0;top:0;color:white' size=1> 

   <div > 

   <a id='pad1' href='11.htm' onmouseout="mouseout();" onmouseover="mouseover()"> 

   子菜单项一一</a><br> 

   <a id='pad1' href='12.htm' onmouseout="mouseout();" onmouseover="mouseover()"> 

   子菜单项一二</a><br> 

   <hr style='color:white' size=1><!--如有必要可以用横线对子菜单分组--> 

   <a id='pad1' href='13.htm' onmouseout="mouseout();" onmouseover="mouseover()"> 

   子菜单项一三</a><br> 

  …… 

   </div> 

  </span>    

  经过上面的步骤,下拉菜单的格式已经定义好了,下面的任务就是控制这些子菜单的显示和隐藏。 

  当鼠标移动到主菜单条上时,应显示其子菜单,我们通过执行domenu(menuid)响应主菜单的onmouseover事件来完成。过程的参数menuid是代表子菜单的区域的id,过程执行时先设置window.event. cancelbubble = true,并计算子菜单显示的位置,包括左上角和右下角坐标。然后执行下列语句来显示子菜单所在区域: 

  curmenu.style.clip = "rect(0 0 0 0) ";curmenu.style.display = "block"; 

  当鼠标移出主菜单时有两种情况,一种情况是鼠标在子菜单及其主菜单之间移动,这时不能隐藏子菜单;另一种情况是鼠标移出了子菜单及其主菜单的区域,这时需要隐藏子菜单。我们通过执行hidemenu()响应主菜单的onmouseout,同时执行hidemenu()响应子菜单所在区域的onmouseout事件来完成。 

  网页中的另外两个函数mouseout() 和mouseover() 的功能很简单,分别用于处理鼠标移动时菜单项的颜色变化。 

  完整的源代码参见《电子与电脑》网站www.pccomputing.com.cn。 

  网页浏览的效果如图1所示,运行环境为ie4.0以上版本。 

  (图注wangye) 图1 

  <html> 

  <head> 

  <title>网页中的下拉菜单</title> 

  </head> 

  <script language="javascript" > 

  var isdroped =false; 

  function mouseout() 

  { 

   window.event.srcelement.style.color = 'white';//鼠标移开时置为白色 

  } 

  function mouseover() 

  { 

   window.event.srcelement.style.color = 'red';//鼠标进入时置为红色//鼠标进入时置为红色 

  } 

  function domenu(menuid) 

  { 

   var curmenu = document.all(menuid); 

   //为避免闪烁,如果下拉菜单已经显示则不重画. 

   if (isdroped==true) 

   { 

   window.event.cancelbubble = true; 

   return false; 

   } 

   window.event.cancelbubble = true; 

   tempmenu = curmenu; 

   //计算下拉菜单的位置 

   x = window.event.srcelement.offsetleft + window.event.srcelement.offsetparent.offsetleft; 

   x2 = x + window.event.srcelement.offsetwidth; 

   y = pad.offsetheight; 

   curmenu.style.top = y; 

   curmenu.style.left = x; 

   curmenu.style.clip = "rect(0 0 0 0)"; 

   curmenu.style.display = "block"; 

   //延时2毫秒后再显示菜单,保证toolbarmenu.offsetheight有值,避免从主菜单移向下拉菜单时下拉菜单消失. 

   window.settimeout("showmenu()", 2); 

   return true; 

  } 

  function showmenu() 

  { 

   y2 = y + tempmenu.offsetheight; 

   tempmenu.style.clip = "rect(auto auto auto auto)"; 

   isdroped =true;//下拉菜单已经显示 

  } 

  function hidemenu() 

  { 

   //如果在下拉菜单的范围之内移动则不隐藏. 

   cy = event.clienty + document.body.scrolltop; 

   if (cy>=y && cy<y2 && event.clientx >= (x+5) && event.clientx <= x2 || 

   cy>1 && cy<y && event.clientx >= (x+5) && event.clientx <= x2-10) 

   { window.event.cancelbubble = true; return;} 

   //隐藏 

   tempmenu.style.display = "none"; 

   window.event.cancelbubble = true; 

   isdroped =false; 

  } 

  </script> 

  <body topmargin=0 leftmargin=0 marginheight=0 marginwidth=0> 

  <div id='menu' style='position:absolute;background-color:white;width:100%;top:0;left:0;'> 

   <div id='pad' style='position:relative;height:20;width:100%;font:bold 11pt 宋体;background-color:#007fff;color:white;'> 

   <a target='_top' title='' id='pad1' 

   onmouseout="mouseout(); hidemenu();" onmouseover="mouseover(); domenu('idpad1');"> 

   菜单项一 

   </a> 

   <span style="color:white"> </span> 

   <a target='_top' title='' id='pad2' 

   onmouseout="mouseout(); hidemenu();" onmouseover="mouseover(); domenu('idpad2');" 

   onclick="window.event.returnvalue=false;"> 

   菜单项二 

   </a> 

   </div> 

  </div> 

  <span id='idpad1' style='display:none;position:absolute;width:140;background-color:#007fff;padding-top:0;padding-left:0;padding-bottom:20;z-index:9;' 

   onmouseout='hidemenu();'> 

   <hr style='position:absolute;left:0;top:0;color:white' size=1> 

   <div style='position:relative;left:0;top:8;'> 

   <a id='pad1' style='text-decoration:none;cursor:hand;font:bold 11pt 宋体;color:white' 

   href='11.htm' target='_top' 

   onmouseout="mouseout();" onmouseover="mouseover()"> 

   子菜单项一一 

   </a><br> 

   <a id='pad1' style='text-decoration:none;cursor:hand;font:bold 11pt 宋体;color:white' 

   href='12.htm' target='_top' 

   onmouseout="mouseout();" onmouseover="mouseover()"> 

   子菜单项一二 

   </a><br> 

   <a id='pad1' style='text-decoration:none;cursor:hand;font:bold 11pt 宋体;color:white' 

   href='13.htm' target='_top' 

   onmouseout="mouseout();" onmouseover="mouseover()"> 

   子菜单项一三 

   </a> 

   </div> 

  </span>    

  <span id='idpad2' style='display:none;position:absolute;width:140;background-color:#007fff;padding-top:0;padding-left:0;padding-bottom:20;z-index:9;' onmouseout='hidemenu();'> 

   <hr style='position:absolute;left:0;top:0;color:white' size=1> 

   <div style='position:relative;left:0;top:8;'> 

   <a id='pad2' style='text-decoration:none;cursor:hand;font:bold 11pt 宋体;color:white' 

   href='21.htm' target='_top' 

   onmouseout="mouseout();" onmouseover="mouseover()"> 

   子菜单项二一</a><br> 

   <a id='pad2' style='text-decoration:none;cursor:hand;font:bold 11pt 宋体;color:white' 

   href='22.htm' target='_top' 

   onmouseout="mouseout();" onmouseover="mouseover()"> 

   子菜单项二二</a><br> 

   <a id='pad2' style='text-decoration:none;cursor:hand;font:bold 11pt 宋体;color:white' 

   href='23.htm' target='_top' 

   onmouseout="mouseout();" onmouseover="mouseover()"> 

   子菜单项二三</a><br> 

   <hr style='color:white' size=1><!--分隔行--> 

   <a id='pad2' style='text-decoration:none;cursor:hand;font:bold 11pt 宋体;color:white' 

   onclick="parent.close()" 

   onmouseout="mouseout();" onmouseover="mouseover()"> 

   退出系统</a> 

   </div> 

  </span> 

  <!--页面的其它内容--> 

  </body> 

  </html> 

 以上就是Javascript设计网页中的下拉菜单的内容,更多相关内容请关注PHP中文网(www.php.cn)! 

追梦flash企业网站管理模板A系列11.0
追梦flash企业网站管理模板A系列11.0

追梦A系列(11.0版本,以下11.0均简称为A)是针对企业网站定制设计的,模板采用全新AS3.0代码编辑,拥有更快的运行和加载速度,A系列模板主要针对图片展示,拥有简洁大气展示效果,并且可以自由扩展图片分类,同时还拥有三个独立页面介绍栏目,一个新闻栏目,一个服务介绍栏目,一个幻灯片展示和flv视频播放栏目。A系列模板对一些加载效果进行了修改,包括背景的拉伸模式以及标题的展示方式等都进行了调整,同

追梦flash企业网站管理模板A系列11.0 0
查看详情 追梦flash企业网站管理模板A系列11.0
相关标签:
java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号