• 如何巧妙的用面向对象封装常用效果


    序言:之前有很多时候PC端页面只有一些切换,悬停下拉效果,可能有多个!这时候可能会选jQuery,但是就这么几个简单的效果用jq有点浪费,所以用原生js,这时候又会又一堆的for循环。。。性能又不太好。

    能不能简单封装一下,可以复用?答案是:肯定的~~

    下面就是一个用构造函数实例化一个对象,用面向对象的思想实现的简单封装,最终效果

    1 javscript

    /**
     * Created by jianfei on 2017/3/20.
     */
    //1 定义构造函数,鼠标悬停下拉效果的封装,类似小插件,使用的时候直接new Overitrm(option);
    //option={
    //  btn: id,被悬停元素的id
    //  item:id,被悬停按钮下要显示的下拉框的id
    //  addclass:被悬停按钮将要添加的className,可以自定义
    // }
    function Overitem(option){
        this.init(option);
    }
    Overitem.prototype={
        init:function(option){
            var _self=this;
            _self.btn=document.getElementById(option.btn)||'';
            _self.item=document.getElementById(option.item)||'';
            _self.addclassname=option.addclass;
            //2.0 绑定事件
            _self.btn.onmouseover=_self.showitem.bind(_self);
            _self.btn.onmouseout=_self.hideitem.bind(_self);
        },
        //2.1 定义事件
        showitem:function () {
            //如何让this指向new Overitem;,在调用的时候用bind把this绑定上去
            this.btn.className=this.addclassname;
            this.item.style.display='block';
        },
        hideitem:function () {
            //如何让this指向new Overitem;,在调用的时候用bind把this绑定上去
            this.btn.className='';
            this.item.style.display='none';
        }
    };
    /**
     * Created by jianfei on 2017/3/20.
     */
    //1定义构造函数
    function Tabitem(option){
        this.init(option);
    }
    Tabitem.prototype={
        init:function(option){
            var _self=this;
            _self.btn=document.getElementsByClassName(option.btn)||'';
            _self.item=document.getElementsByClassName(option.item)||'';
            for(var i=0;i<_self.btn.length;i++){
                _self.btn[i].index=i;
                _self.btn[i].onmouseover=function(){
                    for(var j=0;j<_self.item.length;j++){
                        _self.btn[j].className=option.btn;
                        _self.item[j].className=option.item;
                    }
                    _self.btn[this.index].className=option.btn+' '+option.btnaddclass;
                    _self.item[this.index].className=option.item+' '+option.itemaddclass;
                    //console.log(this);
                    //console.log(_self);
                };
            }
        }
    };

    2 html

    <body>
        <div class="view-page">
            <!--鼠标悬停效果-->
            <ul class="nav-bar">
                <li><a href="/">学院首页</a></li>
                <li id="navbtn-one" class="btns">
                    <a href="javascript:;">学院概况</a>
                    <ul class="experts-lists" id="navlist-one">
                        <li><a href="javascript:;">周芷若</a></li>
                        <li><a href="javascript:;">张无忌</a></li>
                        <li><a href="javascript:;">杨过</a></li>
                        <li><a href="javascript:;">齐天大圣</a></li>
                    </ul>
                </li>
                <li><a href="/">学院图书馆</a></li>
                <li id="navbtn-two" class="btns">
                    <a href="javascript:;">金牌教授</a>
                    <ul class="experts-lists" id="navlist-two">
                        <li><a href="javascript:">周芷若</a></li>
                        <li><a href="javascript:">张无忌</a></li>
                        <li><a href="javascript:">杨过</a></li>
                        <li><a href="javascript:">齐天大圣</a></li>
                    </ul>
                </li>
                <li><a href="/">学院地址</a></li>
            </ul>
        </div>
        <!--切换效果1-->
        <div class="view-tab">
            <div class="box">
                <ul class="fl">
                    <li class="tabbtn on">天龙八部</li>
                    <li class="tabbtn">射雕英雄传</li>
                    <li class="tabbtn">倚天屠龙记</li>
                    <li class="tabbtn">乾坤大挪移</li>
                    <li class="tabbtn">天龙八部</li>
                </ul>
                <div class="tabmsg fr">
                    <div class="tabmsg_list block">1111111111</div>
                    <div class="tabmsg_list">2222222222</div>
                    <div class="tabmsg_list">3333333333</div>
                    <div class="tabmsg_list">4444444444</div>
                    <div class="tabmsg_list">5555555555</div>
                </div>
            </div>
        </div>
        <!--切换效果2-->
        <div class="view-tab">
            <div class="box">
                <div class="tabmsg fl">
                    <div class="itemtwo block">1111111111</div>
                    <div class="itemtwo">2222222222</div>
                    <div class="itemtwo">3333333333</div>
                    <div class="itemtwo">4444444444</div>
                    <div class="itemtwo">5555555555</div>
                </div>
                <ul class="fr">
                    <li class="btntwo on">天龙八部</li>
                    <li class="btntwo">射雕英雄传</li>
                    <li class="btntwo">倚天屠龙记</li>
                    <li class="btntwo">乾坤大挪移</li>
                    <li class="btntwo">天龙八部</li>
                </ul>
            </div>
        </div>
        <script>
            //1悬停效果一
            var itemone=new Overitem({
                btn:'navbtn-one',
                item:'navlist-one',
                addclass:'hover'
            });
            //2悬停效果2
            var itemtwo=new Overitem({
                btn:'navbtn-two',
                item:'navlist-two',
                addclass:'hover'
            });
            //1 切换一
            var tabone=new Tabitem({
                btn:'tabbtn',//切换按钮的classname
                item:'tabmsg_list',//切换要显示的内容的classname
                btnaddclass:'on',//切换按钮追加的classname控制选中的样式
                itemaddclass:'block'//切换内容追加的classname,控制显示还是影藏
            });
            //2切换二
            var tabtwo=new Tabitem({
                btn:'btntwo',
                item:'itemtwo',
                btnaddclass:'on',
                itemaddclass:'block'
            });
        </script>
    </body>

    3 css

    /*reset*/
    *{
        margin: 0;
        padding: 0;
        list-style: none;
        box-sizing: border-box;
        text-decoration: none;
    }
    
    /*view-page*/
    .view-page{
        width: 100%;
        height: 500px;
        background: #ccc;
        overflow: hidden;
    }
    .nav-bar:before,.nav-bar:after{
        display: table;
        content: '';
        clear: both;
    }
    .nav-bar{
        width: 900px;
        margin: 0 auto;
        background: purple;
    }
    .nav-bar>li{
        float: left;
        margin-left: 20px;
        /**/
        position: relative;
    }
    .nav-bar>li:hover,.nav-bar>li.hover{
        background: #999;
    }
    .nav-bar>li>a{
        display: block;
        font-size: 16px;
        color: #fff;
        line-height: 60px;
        padding: 0 20px;
    }
    
    /*-experts-lists-*/
    .experts-lists{
        position: absolute;
        width: 100%;
        top: 60px;
        left: 0;
        background: rgba(0,0,0,.4);
        padding: 10px 0;
        display: none;
    }
    .experts-lists li a{
        display: block;
        text-align: center;
        line-height: 35px;
        color: #fff;
        font-size: 14px;
        -webkit-transition: all .3s;
        -moz-transition: all .3s;
        -o-transition: all .3s;
        transition: all .3s;
    }
    .experts-lists li a:hover{
        color: purple;
    }
    /*view-tab*/
    .fl{
        float: left;
    }
    .fr{
        float: right;
    }
    .view-tab{
        width: 100%;
        overflow: hidden;
        height: 300px;
        margin-top: 20px;
    }
    .box{
        width: 800px;
        overflow: hidden;
        margin: 0 auto;
    }
    .box ul{
        width: 150px;
    }
    .box ul li{
        line-height: 40px;
        background: #999;
        text-align: center;
        cursor: pointer;
    }
    .box ul li+li{
        margin-top: 10px;
    }
    .box ul li:hover,
    .box ul li.on{
        background: purple;
    }
    /*tabmsg*/
    .tabmsg{
        width: 625px;
        height: 240px;
        position: relative;
    }
    .tabmsg_list,
    .itemtwo{
        position: absolute;
        width: 100%;
        height: 100%;
        left: 0;
        top: 0;
        background: #ccc;
        display: none;
    }
    .tabmsg_list.block,
    .itemtwo.block{
        display: block;
    }
    /*切换2*/
  • 相关阅读:
    几个不同的关键XPath概念
    go get 下载的包放在哪里呢?
    之前写的关于chromedp的文章被别人转到CSDN,很受鼓励,再来一篇golang爬虫实例
    微信小程序填坑之旅(2)-wx.showLoading的时候,仍能点击穿透,造成重复点击button的问题
    微信小程序填坑之旅(1)-app.js中用云开发获取openid,在其他页上用app.globaldata.openid获取为空
    JS 定时器-setInterval、clearInterval、setTimeout
    微信小程序开发入门教程(四)---自己动手做个小程序
    MT【247】恒成立画图像
    MT【246】方程根$acksim$图像交点
    MT【245】小概率事件
  • 原文地址:https://www.cnblogs.com/-walker/p/6591026.html
Copyright © 2020-2023  润新知