关于节流阀的理解

关于节流阀的理解

前言:总是感叹于自己的记性真的和鱼一样。果然像我这样平凡的人,还是只能靠烂笔头啊。今天记录一下节流阀的思想,和实现方法。

想象一下有一个开关,控制着动画的运行。就像阀一样,阀开着水才能流出。同样的,我们也可以设一个(阀)flag=true;。在事件的开头处,判断if(flag){flag=false;do somenthing}阀打开的情况下运行函数,并且把开着的水龙头关掉flag=false;让事件无法连续触发,最后事件结尾判断动画如果如果结束,再打开阀flag=true

下面是一个切割轮播图的例子:

html

<body>
<div class="box">
    <ul>
        <li><img src="imgs/01.jpg" alt=""></li>
        <li><img src="imgs/02.jpg" alt=""></li>
        <li><img src="imgs/03.jpg" alt=""></li>
        <li><img src="imgs/04.jpg" alt=""></li>
    </ul>
    <ul>
        <li><img src="imgs/01.jpg" alt=""></li>
        <li><img src="imgs/02.jpg" alt=""></li>
        <li><img src="imgs/03.jpg" alt=""></li>
        <li><img src="imgs/04.jpg" alt=""></li>
    </ul>
    <ul>
        <li><img src="imgs/01.jpg" alt=""></li>
        <li><img src="imgs/02.jpg" alt=""></li>
        <li><img src="imgs/03.jpg" alt=""></li>
        <li><img src="imgs/04.jpg" alt=""></li>
    </ul>
    <ul>
        <li><img src="imgs/01.jpg" alt=""></li>
        <li><img src="imgs/02.jpg" alt=""></li>
        <li><img src="imgs/03.jpg" alt=""></li>
        <li><img src="imgs/04.jpg" alt=""></li>
    </ul>
</div>

<div class="btn-warp">

    <a href="javascript:void(0);">点我</a>
    <a href="javascript:void(0);">点我</a>

</div>
</body>

css

    <style>
        *{
            padding:0;
            margin:0;
        }
        .box{
             560px;
            height: 380px;
            display: flex;
            margin:auto;
        }
        .box ul{
            flex: 1;
            list-style-type: none;
             25%;
            height: 100%;
            position: relative;
            transform-style: preserve-3d;
        }
        .box ul:nth-child(2) img{
            margin-left: -140px;
        }
        .box ul:nth-child(3) img{
            margin-left: -280px;
        }
        .box ul:nth-child(4) img{
            margin-left: -420px;
        }

        ul li{
             100%;
            height: 100%;
            position: absolute;
            overflow: hidden;
        }
        ul li:nth-child(1){
            transform: rotateX(90deg) translateZ(190px);
        }
        ul li:nth-child(2){
            transform: rotateX(-90deg) translateZ(190px);
        }
        ul li:nth-child(3){
            transform:rotateX(180deg) translateZ(190px);
        }
        ul li:nth-child(4){
            transform:translateZ(190px);
        }
        .btn-warp{
            680px;
            height:1px;
            position: relative;
            top:-70px;
            margin:0 auto;

        }
        .btn-warp a{
            border-radius: 5px;
            background: black;
            color: #FFF;
        }
        .btn-warp a:nth-child(1){
            display: block;
            float: left;
            60px;
            height:60px;
            text-align: center;
            line-height: 60px;


        }
        .btn-warp a:nth-child(2){
            display: block;
            float: right;
            60px;
            height:60px;
            text-align: center;
            line-height: 60px;

        }
    </style>

javascript

<script>
    $(function(){
        var num = 0;
        //创建一个阀,默认开着
        var flag = true;
        $('.btn-warp a').on('click',function(){
            var index = $(this).index();
            //判断阀是否开启,
            if(flag){
                //运行事件,并且关阀
                flag = false;
                if(index==0){
                    num++;
                }else if(index==1){
                    num--;
                }

                $('.box ul').each(function(index,value){
                    $(value).css({
                        'transform':'rotateX('+num*90+'deg)',
                        'transition':'all 1s+'+index*200+'ms'
                    })
                });
            }

        });

        //判断过渡事件是否执行完毕。
        $('.box ul').last().on('transitionend',function(){
            //重新打开阀,以便下一次点击
            flag = true;
        });

    });
原文地址:https://www.cnblogs.com/hynb/p/6034406.html