Jquery 组件封装

362 阅读2分钟

基于导航栏的组件封装

第一种方式,核心的函数 Object.assign

Object.assign()  方法将所有可枚举Object.propertyIsEnumerable() 返回 true)和自有Object.hasOwnProperty() 返回 true)属性从一个或多个源对象复制到目标对象,返回修改后的对象。

封装所带的参数

 toggle
    入参:
{
    el:'#m6',//必填
    childerEl:'.sub',//必填
    time:500 //默认时间为300
}
time根据项目需要修改time的时间

代码

HTML

    <body>
    <div class="navsum content clearfix">
        <div class="navBar">
            <ul>
                <li id="m1">
                    <h3><a href="./index.html">首页</a></h3>
                </li>
                <li id="m2">
                    <h3><a href="javascript:void(0);">学校概况</a></h3>
                    <ul class="sub">
                        <li><a href="javascript:void(0);">学校简介</a></li>
                        <li><a href="javascript:void(0);">学校领导</a></li>
                        <li><a href="javascript:void(0);">学校标识</a></li>
                        <li><a href="javascript:void(0);">校园风光</a></li>
                        <li><a href="javascript:void(0);">校园视频</a></li>
                    </ul>
                </li>
                <li id="m3">
                    <h3><a href="javascript:void(0);">机构设置</a></h3>
                </li>
                <li id="m4">
                    <h3><a href="javascript:void(0);">人才培养</a></h3>
                </li>
                <li id="m5">
                    <h3><a href="javascript:void(0);">科学研究</a></h3>
                </li>
                <li id="m6">
                    <h3><a href="javascript:void(0);">招生就业</a></h3>
                    <ul class="sub">
                        <li><a href="javascript:void(0);">招生网</a></li>
                        <li><a href="javascript:void(0);">就业网</a></li>
                    </ul>
                </li>
                <li id="m7">
                    <h3><a href="javascript:void(0);">党建工作</a></h3>
                </li>
                <li id="m8">
                    <h3><a href="javascript:void(0);">国际教育</a></h3>
                    <ul class="sub">
                        <li><a href="javascript:void(0);">国际交流处</a></li>
                        <li><a href="javascript:void(0);">国际教育学院</a></li>
                    </ul>
                </li>
                <li id="m9">
                    <h3><a href="javascript:void(0);">学生生活</a></h3>
                    <ul class="sub">
                        <li><a href="javascript:void(0);">学生处</a></li>
                        <li><a href="javascript:void(0);">校团委</a></li>
                    </ul>
                </li>
                <li id="m10">
                    <h3><a href="javascript:void(0);">创新创业</a></h3>
                    <ul class="sub">
                        <li><a href="javascript:void(0);">创新创业学院</a></li>
                        <li><a href="javascript:void(0);">国际商学院</a></li>
                    </ul>
                </li>
                <li id="m11">
                    <h3><a href="javascript:void(0);">校友之家</a></h3>
                </li>
            </ul>
        </div>
    </div>
</body>
// 公共的css
// 涉及到 浮动的关系要加入 clearfix
.clearfix:before, .clearfix:after { content:""; display:table;}
.clearfix:after{ clear:both;}
.clearfix{ *zoom:1;/*ie6,7*/}


// 导航css
.navsum .navBar {
    position: relative;
    z-index: 1;
    height: 60px;
    float: left;
    width: 1140px
}

.navsum .navBar>ul>li {
    position: relative;
    float: left;
    width: 9%;
    display: inline;
    text-align: center
}

.navsum .navBar>ul>li>h3 a {
    zoom: 1;
    height: 20px;
    padding: 20px 0;
    display: block;
    color: #333333;
    font-size: 18px;
    transition: all 0.5s ease-in-out;
    -moz-transition: all 0.5s;
    -webkit-transition: all 0.5s
}

.navsum .navBar>ul>li>h3 a:hover {
    color: #ffffff;
    font-weight: bold;
    background: #871f27
}

.navsum .navBar>ul>li .sub {
    display: none;
    width: 100%;
    position: absolute;
    left: 0;
    top: 60px;
    background: url(../img/sub_bg.png) center center repeat;
    float: left
}

.navsum .navBar>ul>li .sub a:hover {
    color: #ee9123 !important;
    transition: .5s
}

.navsum .navBar>ul>li .sub li {
    text-align: center;
    line-height: 24px
}

.navsum .navBar>ul>li .sub li a {
    color: #ffffff;
    display: block;
    zoom: 1;
    padding: 10px 0
}

//需要引入 jquery进行操作 不然无法使用$ 进行dom的链式操作
//index.js
function toggle(opt) {
    let defaultopt = {
      time: 300, //默认时间为300
    };
    Object.assign(defaultopt, opt);
  
    //鼠标移入
    $(defaultopt.el).mouseover(function () {
      $(this).children(defaultopt.childerEl).slideDown(defaultopt.time);
    });
  
    // 鼠标移出
    $(defaultopt.el).mouseleave(function () {
      //鼠标移入
      // $(this).children('.sub').css('display','block')
      $(this).children(".sub").slideUp(defaultopt.time);
    });
  }
  
  //主页面中HTML里的js的调用
  function togglesum() {
    var elarr = ['#m2', '#m6', '#m8', '#m9', '#m10']
    elarr.forEach((item, index) => {
        if (item == '#m2') { // 判断修改的 arrayitem
            //第一个延迟1000ms
            toggle({
                el: elarr[0], //必填
                childerEl: '.sub',//必填
                time: 1000 //默认时间为300
            })
        } else {
            // 正常使用,不传值 默认300
            toggle({
                el: item,
                childerEl: '.sub',
                // time: 400 //默认时间为300
            })
        }
    });
}