--缓慢下拉列表案例--

本文介绍了如何使用JavaScript实现一个响应式的下拉菜单动画,通过添加开关机制优化操作流程,并探讨了如何根据用户行为调整高度动画效果。核心内容包括定时器操作、CSS高度计算和状态切换的计时器控制。
摘要由CSDN通过智能技术生成

<body>

    <style>

        .btn{

            width: 100px;

            height: 60px;

            background-color: aqua;

            line-height: 60px;

            text-align: center  ;

       

        }

        .mainbox{

            width: 100px;

            height: 60px;

            background-color: aquamarine;

            overflow: hidden;

           

        }

        .box{

            width: 100px;

            height: 40px;

            line-height: 10px;

            text-align: center;

        }

    </style>

    <div class="btn">

        <button>下拉</button>

    </div>

    <div class="mainbox">

        <div class="box">hello1</div>

        <div class="box">hello2</div>

        <div class="box">hello3</div>

        <div class="box">hello4</div>

    </div>

    <script>

        window.onload=function(){

            var btn=document.querySelector(".btn")

            btn.addEventListener("click",function(){

                //添加计时器

                setInterval(function(){

                    var mainbox=document.querySelector(".mainbox")

                    //获取css中的高度

                    let h=window.getComputedStyle(mainbox).height

//设定值=当前+(目标值-当前)*百分比

                    mainbox.style.height=parseInt(h)+(200-parseInt(h)*0.5)+'px'

                },300)

            })

        }

    </script>

 

 

    <script>

 //优化:点击下拉后再次点击收回所有的盒子。【利用开关思想】

        window.onload = function () {

            var btn = document.querySelector(".btn")

            var mainbox = document.querySelector(".mainbox")

            //添加开关

            var flag = true

            var time = null

            btn.addEventListener("click", function () {

                if (flag = !flag) {

                    clearInterval(time)

                    mainbox.style.height = "0px"

                } else {

                         //添加计时器

                    time = setInterval(function () {

                        //获取css中的高度

                        let h = window.getComputedStyle(mainbox).height

                        mainbox.style.height = parseInt(h) + (200 - parseInt(h) * 0.5) + 'px'

                    }, 300)

                }

             

            })

        }

    </script>

 

 

    <script>

//再次优化:添加拉上的动画【在全局设置一个变量是我们的预设高度,当flag为false时将变量值设为0,当flag为true时将变量设置为我们预设的高度】

        window.onload = function () {

            var btn = document.querySelector(".btn")

            var mainbox = document.querySelector(".mainbox")

            //添加开关

            var flag = true

            var time = null

            var height

            btn.addEventListener("click", function () {

                //每次都要清楚计时器防止其按多次

                clearInterval(time)

                if (flag = !flag) {

                   height=0

                   

                } else {

                    height=200

                }

                //添加计时器

                time = setInterval(function () {

                       

                        //获取css中的高度

                        let h = window.getComputedStyle(mainbox).height

                        mainbox.style.height = parseInt(h) + (height - parseInt(h) * 0.8) + 'px'

                    }, 300)

            })

        }

    </script>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值