javascript - 如何在落下动画完成后才能点击向上的动画?代码如下
高洛峰
高洛峰 2017-04-10 15:46:08
[JavaScript讨论组]
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>点击下落</title>
    <style type="text/css">
    body{
        height: 600px;
    }
    li{
        margin: 20px;
        position: absolute;
        top: 20px;
        width: 50px;
        height: 50px;
        list-style: none;
        background: red;
    }


    </style>
    <script type="text/javascript">
    window.onload = function(){
/*获取元素属性值*/
function getStyle(ele,attr){
            return ele.currentStyle? ele.currentStyle[attr] :getComputedStyle(ele)[attr];
        }
/*改变属性元素移动*/
function doMove(ele,dir,attr,target,endFn){
            dir = parseInt(getStyle(ele,attr))<target ? dir : -dir;
            clearInterval(ele.timer);
            ele.timer = setInterval(function(){
            var speed = parseInt(getStyle(ele,attr))+dir;
                if (speed>=target&&dir>0||speed<=target&&dir<0) {    //向前跑
                    speed = target;
                };
            ele.style[attr] = speed+'px';
            if (speed==target) {
                clearInterval(ele.timer);
                endFn&&endFn();
                }
                
            },30)
        }
    for (var i = 0; i < 20; i++) {
                document.body.innerHTML += "<li style='left:"+i*60+"px'></li>"
            };
    var lists = document.getElementsByTagName('li'); 
    var onoff=false;
    var updown =true;
    var n;
    document.body.onclick =  UDFloat;
    function UDFloat(){
        if (onoff) {
            return
        };
        onoff = true;
        if (updown) {
            n = 0;
            updown = false;
        } else{
            n = 2;
            updown = true;
        }
        var arr = [50,400,50,50];
        var num = 0;
        timerT= null;
        clearInterval(this.animate);
        timerT = setInterval(function(){
            doMove(lists[num],arr[n],'top',arr[n+1]);
            num++;
            if(num==lists.length){
                clearInterval(timerT);
            }            
        },80)
        onoff = false;
    }    
}
    </script>
</head>
<body>
    
</body>
</html>
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(1)
PHPz
var movedCount=0,listLength=lists.length;
function UDFloat(){
    //判断完成的数量,如果已经完成,重置于movedCount为0
    if(movedCount!==0&&movedCount!==listLength){
      return;
    }
    if(movedCount===listLength){
      movedCount=0;
    }

    if (updown) {
        n = 0;
        updown = false;
    } else{
        n = 2;
        updown = true;
    }
    var arr = [50,400,50,50];
    var num = 0;
    timerT= null;
    clearInterval(this.animate);
    timerT = setInterval(function(){
        doMove(lists[num],arr[n],'top',arr[n+1],function(){
          //move完成后,记录完成的数量
          movedCount++;
        });
        num++;
        if(num==lists.length){
            clearInterval(timerT);
        }
    },80)

}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号