zoukankan      html  css  js  c++  java
  • 关于节流阀的理解

    关于节流阀的理解

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

    想象一下有一个开关,控制着动画的运行。就像阀一样,阀开着水才能流出。同样的,我们也可以设一个(阀)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;
            });
    
        });
    
  • 相关阅读:
    angular5 二维码插件
    ag-grid 设置默认选中多行
    断点续传和下载原理分析
    Volley 实现原理图
    Volley全方位解析,带你从源码的角度彻底理解
    23种设计模式
    android service
    Android drawable微技巧
    Android ListView实现不同item的方法和原理分析
    Android 网络框架 volley源码剖析
  • 原文地址:https://www.cnblogs.com/hynb/p/6034406.html
Copyright © 2011-2022 走看看