JS实现博客前端页面(三) ——封装下拉菜单

news/2024/12/23 19:59:40

在JS实现博客前端页面(一) 和JS实现博客前端页面(二)中已经实现了对获取DOM元素和CSS样式相关的方法的封装,本文将实现下拉菜单组件封装。

下拉菜单

界面设计

创建一个顶部header区域,放入“logo图片”和“个人中心”,鼠标滑过“个人中心”时,会显示下拉菜单,鼠标移出时会隐藏,对于下拉菜单的每一项,鼠标划过有背景样式的切换。
图片描述

搭建HTML界面

<!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>

设置CSS样式

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()方法,用于设置显示元素

//设置显示
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()方法,用于设置鼠标移入移出事件

//设置鼠标移入移入移出
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课程实战篇笔记整理


http://www.niftyadmin.cn/n/2266064.html

相关文章

Mysql问题整理

1.事物的ACID特性的持久性&#xff0c;不是很理解。 查下相关书籍

pink老师前端基础部分内容笔记

一、浏览器 1.常用浏览器 IE、火狐&#xff08;Firefox&#xff09;、谷歌(Chrome)、Safari、Opera等 2.浏览器内核 二、Web标准 三、VScode使用 四、HTML基础 <!DOCTYPE html>//声明文本类型是html5 <html lang"en">//用英文来显示&#xff0c;中文…

JavaScript设计模式与开发实践-第2章-this、call和apply

1、this的指向 三种情况&#xff1a; 对象方法中的this普通函数中的this构造器中的this需要注意&#xff1a; 普通函数中的this在ES5中的strict模式下有所变化构造器中如果显式返回了一个对象&#xff0c;那么返回的将不是this所指向的对象call和apply用来修改传入函数的this的…

VScode前端常用快捷键

功能快捷键添加多行缩进tab删除多行缩进shift tab添加多行注释ctrl/撤销ctrlZ恢复刚才的撤销ctrlshiftZ全部替换ctrlH命令面板&#xff08;css tree&#xff09;ctrlshiftP

OSChina 周二乱弹 ——爱酱,老司机前来自首了

2019独角兽企业重金招聘Python工程师标准>>> 独孤青冥 : 月光下的凤尾竹 月光下的凤尾竹 - 葫芦丝 手机党少年们想听歌&#xff0c;请使劲儿戳&#xff08;这里&#xff09; javaQ : 秋季甚好…… 对呀没蚊子咬你。 还有啊&#xff0c; 没几天就中秋放假啦&#xff…

AB测试结果分析

AB测试,200个请求,20个并发.这样的测试强度,CPU占了70-80%,w3p占用了70多M内存,本想多测几次,看看它的内存会不会涨上去,没 有测试机器没办法,开发机要干活.我估计CPU就有问题了,性能有好些个地方还需要优化.顺便把测试的工具用法作个记号基本用法:ab -n 全部请求数 -c 并发数 …

夺命雷公狗---DEDECMS----20dedecms取出栏目页对应的内容

取出栏目页对应的内容 现在我们的栏目页面是可以完全正常跳转了&#xff0c;那么我们现在需要完成的就是让他的内容全部&#xff08;电影&#xff0c;连续剧&#xff0c;综艺&#xff09;分类的显示出来。 我们还是要使用{dede:arclist}标签来取出我们所需要的内容&#xff0c;…

Docker(一)之 应用(Application)部署容器化的演进之路

前言 容器化技术可以帮助企业更大化资源利用&#xff0c;同时帮助项目相关人员&#xff08;开发、运维、测试、安全等&#xff09;以最小的成本实现项目快速上云部署&#xff0c;掌握容器化管理工具Docker&#xff0c;就掌握了云原生最基础、最核心技术之一 应用&#xff08;…