原生JS带动画手风琴下拉

JS代码:

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

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

            if(k>=hao_nav.maxH){
                k=hao_nav.maxH;
                hao_nav.NumUp=hao_nav.NumDown;
                hao_nav.on=true;
                clearInterval(hao_nav.timerDown);
            }
            hao_nav.oNav.children[hao_nav.NumDown].style.height = k+'px';
        },1);
    },
    containerUp:function(){ //向上滑动
//        console.log(this.NumUp)
        if(this.NumUp!=null){
            t=this.maxH;
            this.timerUp = setInterval(function(){
                t-=hao_nav.speed;
                if(t<=hao_nav.minH){
                    t=hao_nav.minH;
                    hao_nav.on=true;
                    clearInterval(hao_nav.timerUp);
                }
                hao_nav.oNav.children[hao_nav.NumUp].style.height = t+'px';
            },1);
        }
    },
    containerSame:function(){ //当高度相等时执行的向上滑动;
//        console.log(this.NumSame)
        l=this.maxH;
        this.timerSame = setInterval(function(){
            l-=hao_nav.speed;
            if(l<=hao_nav.minH){
                l=hao_nav.minH;
                hao_nav.on=true;
                clearInterval(hao_nav.timerSame);
            }
            hao_nav.oNav.children[hao_nav.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;}
    </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>
<script src="js/hao_nav.js"></script>
<script>
    hao_nav.init({
        id:'Nav', //容器的ID
        btn:'a', //点击的按钮
        minH:30, //子容器缩小的最小值
        maxH:240, //子容器的最大值不能大于总容器的高度
        classOn:'on', //点击按钮样式的变化--可为空
        speed:5 //速度
    })
</script>
</body>
</html>

这是自己写的小组件,有不足的地方可以提出。一起交流,共同学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值