在JS实现博客前端页面(一) 和JS实现博客前端页面(二)中已经实现了对获取DOM元素和CSS样式相关的方法的封装,本文将实现下拉菜单组件封装。javascript
建立一个顶部header区域,放入“logo图片”和“我的中心”,鼠标滑过“我的中心”时,会显示下拉菜单,鼠标移出时会隐藏,对于下拉菜单的每一项,鼠标划过有背景样式的切换。css
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script type="text/javascript" src="js/base.js"></script> <script type="text/javascript" src="js/index.js"></script> <link rel="stylesheet" type="text/css" href="css/index.css" /> </head> <body> <header id="header"> <div class="logo"><img src="images/logo.gif" alt="" /></div> <div class="member">我的中心 <ul class="member_ul"> <li><a href="###">设置</a></li> <li><a href="###">换肤</a></li> <li><a href="###">帮助</a></li> <li><a href="###">退出</a></li> </ul> </div> <div class="login">登陆</div> </header><!-- /header --> </body> </html>
body { margin:0; padding:0; background:#fff url(../images/header_bg.png) repeat-x; font-size:12px; color:#333; } ul { padding:0; margin:0; } ul li { list-style-type:none; } #header { width:900px; height:30px; margin:0 auto; } #header .logo { width:100px; height:30px; float:left; } #header .logo img { display:block; } #header .member { position:relative; width:70px; height:30px; left: 0; line-height:30px; float:right; background:url(../images/arrow.png) no-repeat 55px center; cursor:pointer; } #header .login{ float: right; width: 35px; height: 30px; line-height: 30px; cursor: pointer; } #header ul { position:absolute; top:30px; background:#FBF7E1; width:100px; height:120px; border:1px solid #999; border-top:none; padding:10px 0 0 0; display:none; } #header ul li { height:25px; line-height:25px; text-indent:20px; letter-spacing:1px; } #header ul li a { display:block; text-decoration:none; color:#333; background:url(../images/arrow3.gif) no-repeat 5px 45%; } #header ul li a:hover { background:#fc0 url(../images/arrow4.gif) no-repeat 5px 45%; }
在base.js中继续封装show()方法,用于设置显示元素html
//设置显示 Base.prototype.show = function(){ for (var i=0;i<this.elements.length;i++){ var element = this.elements[i]; element.style.display = 'block'; } return this; }
在base.js中继续封装hide()方法,用于设置隐藏元素前端
//设置显示 Base.prototype.hide= function(){ for (var i=0;i<this.elements.length;i++){ var element = this.elements[i]; element.style.display = 'none'; } return this; }
在base.js中继续封装hover()方法,用于设置鼠标移入移出事件java
//设置鼠标移入移入移出 Base.prototype.hover = function(over,out){//over为移入事件,out为移出事件 for (var i=0;i<this.elements.length;i++){ var element = this.elements[i]; element.onmouseover = over; element.onmouseout = out; } return this; }
window.onload = function () { //我的中心的下拉菜单 $().getClass('member').hover(function () {//传入over事件 $().getClass('member').css('background', 'url(images/arrow2.png) no-repeat 55px center'); $().getClass('member_ul').show(); }, function () {//传入out事件 $().getClass('member').css('background', 'url(images/arrow.png) no-repeat 55px center'); $().getClass('member_ul').hide(); }); }
以上内容来自李炎恢老师JavaScript课程实战篇笔记整理segmentfault