原生JS手风琴下拉(修改)

上一篇写的原生JS手风琴。有朋友说在同一页面上不能同时new两个方法。不然就会被覆盖。确实是这样。因为写法的问题所以怎么new都是引用的是一个对象;其他的会被覆盖掉.所以针对这事件,做了修改

javascript:

var hao_nav =function() {
    this.NumDown=0;// 该值为点击获取的值
    this.NumUp=null;// 该值为上次点击的值
    this.NumSame=null;// //该值为点击时该容器高度等于传就来的值
    this.timerDown=null;// 向下滑动定时器
    this.timerUp=null;//  向上滑动定时器
    this.timerSame=null;// 当点击时该容器高度等于传就来的高度时触发的定时器
    this.containerH=0;//初始化容器高度
    this.isFirst=true;//是否第一次点击
    this.on=true;//开关
    this.minH=null;//此为最小高度
    this.maxH=null;//此为最大高度
    this.classOn=null;//样式
    this.json=null;
    this.speed=null;//速度
    //self = this;
    var thatObj = this;
    this.init=function(obj){
        var self = this;
        this.json = {};
        for(var i in obj) {
            this.json[i] = obj[i];
        }
        //console.log(self.json)
        this.minH = parseInt(self.json.minH);
        this.maxH = parseInt(self.json.maxH);
        this.classOn = this.json.classOn;
        this.speed = parseInt(self.json.speed);
//console.log(typeof (this.speed))
		//console.log(this)
        this.oNav = document.getElementById(self.json.id);
        this.aSel = self.oNav.getElementsByTagName(self.json.btn);


//console.log(self.json);


        for(var i=0; i<this.aSel.length; i++){


            this.aSel[i].index = i;
            this.aSel[i].onclick = function(){
               // alert(self.json.id);
               // return ;
            	//console.log(self.json.id)
                self.NumDown = this.index;
//                console.log(this.NumDown)
                self.containerH  = self.oNav.children[self.NumDown].offsetHeight;
                // conaolw.lof
                if(self.on==false){return false}//阻止定时器在运行中手贱的点击按钮二次触发
                self.on=false;
                if(self.isFirst&&self.containerH==self.minH){
                    self.NumUp=0;
                    self.isFirst=false;
                }if(self.containerH==self.maxH){
                    self.aSel[self.NumDown].className = '';
                    self.NumUp=null;
                    self.isFirst=false;
                    self.NumSame=self.NumDown;
//                    console.log(self.NumSame)
                    self.containerSame();
                    return ;
                }
//console.log(1)
                self.containerUp();
                self.containerDown();
            }
        }
    };
    this.containerDown=function(){ //向下滑动
//        console.log(this.NumDown)
        for(var z=0; z<thatObj.aSel.length; z++){
            thatObj.aSel[z].className = '';
        }
        thatObj.aSel[thatObj.NumDown].className = this.classOn;
        k=this.minH;
        this.timerDown = setInterval(function(){
            k+=thatObj.speed;


            if(k>=thatObj.maxH){
                k=thatObj.maxH;
                thatObj.NumUp=thatObj.NumDown;
                thatObj.on=true;
                clearInterval(thatObj.timerDown);
            }
            thatObj.oNav.children[thatObj.NumDown].style.height = k+'px';
        },1);
    };
    this.containerUp=function(){ //向上滑动
//        console.log(this.NumUp)
        if(this.NumUp!=null){
            t=this.maxH;
            this.timerUp = setInterval(function(){
                t-=thatObj.speed;
                if(t<=thatObj.minH){
                    t=thatObj.minH;
                    thatObj.on=true;
                    clearInterval(thatObj.timerUp);
                }
                thatObj.oNav.children[thatObj.NumUp].style.height = t+'px';
            },1);
        }
    };
    this.containerSame=function(){ //当高度相等时执行的向上滑动;
//        console.log(this.NumSame)
        l=this.maxH;
        console.log(l);


        this.timerSame = setInterval(function(){
            l-=thatObj.speed;
            if(l<=thatObj.minH){
                l=thatObj.minH;
                thatObj.on=true;
                clearInterval(thatObj.timerSame);
            }
            thatObj.oNav.children[thatObj.NumSame].style.height = l+'px';
        },1);
    }
};
 

html:

<!DOCTYPE html>  
<html>  
<head lang="en">  
    <meta charset="UTF-8">  
    <title></title>  
    <style>  
        *{margin: 0; padding: 0;}  
        .nav{width: 900px; height: 300px; margin: 0 auto; background: #000000; overflow: hidden;}  
        .nav div{width: 900px; height: 240px; overflow: hidden;}  
        .nav .a{background: #ff0000;height: 240px;}  
        .nav .b{background: #0061ba;height: 30px;}  
        .nav .c{background: #dbc295; height: 30px;}  
        .nav a{width: 900px; height: 30px; display: block; text-align: center; color: #FFFFFF; line-height: 30px; }  
        .nav .on{background: #29799c;}  
        .nav .act{background: #ccc;}  
        #Nav2{margin-top: 100px;}
    </style>  
</head>  
<body>  
<div class="nav" id="Nav">  
    <div class="a"><a class="on" href="javascript:;">点击按钮</a></div>  
    <div class="b"><a href="javascript:;">点击按钮</a></div>  
    <div class="c"><a href="javascript:;">点击按钮</a></div>  
</div>  
<div class="nav" id="Nav2">  
    <div class="a"><a class="on" href="javascript:;">点击按钮</a></div>  
    <div class="b"><a href="javascript:;">点击按钮</a></div>  
    <div class="c"><a href="javascript:;">点击按钮</a></div>  
</div>  
 <script src="js/json.js"></script>
<script>

</script>
<script>  
new hao_nav().init({
        id:'Nav',  //容器的ID
        btn:'a', //点击的按钮  
        minH:30, //子容器缩小的最小值  
        maxH:240, //子容器的最大值不能大于总容器的高度  
        classOn:'on', //点击按钮样式的变化--可为空  
        speed:5, //速度 ,
        st:0
    });
new hao_nav().init({
        id:'Nav2', //容器的ID
        btn:'a', //点击的按钮
        minH:30, //子容器缩小的最小值
        maxH:240, //子容器的最大值不能大于总容器的高度
        classOn:'act', //点击按钮样式的变化--可为空
        speed:5, //速度
        st:1
    })
</script>  
</body>  
</html>  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值