| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1149 人关注过本帖
标题:javascript 定时器和变量相关 忘好心人前辈帮忙看一下。
只看楼主 加入收藏
a00123344
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-7-27
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
javascript 定时器和变量相关 忘好心人前辈帮忙看一下。
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <style type="text/css">
            div{
                width:20px;
                height:20px;
                background-color: red;
                position: absolute;
                margin-top: 10px;
                float:left;
                top:0;
            }
        </style>        
    </head>
    <body>
    <script type="text/javascript">
    window.onload = function (){      
        var len = 100,
            num = 0,
            num1 = 0,
            timer = null,
            timer1 = null,
            off = true,
            aDiv = document.getElementsByTagName('div');
            function getStyle (obj,attr){
                return obj.currentStyle? obj.currentStyle[attr] : getComputedStyle(obj,null)[attr];
            };
            
            for(var i = 0 ; i< len ; i++){
                document.body.innerHTML += "<br><div></div><br>"
            };
            for(var i = 0 ; i<aDiv.length ; i++){
                aDiv[i].style.left = i*30+'px';
            }

            
            document.onclick = function (){  
                                        /*为何将num = 0,timer = null申明为局部变量啦之后 红色方块就恢复正常。
                                        (就是快速双击的时候不会出现div上下分离了,而是无论如何点击都是按照重第一个块开始按预期的走(就是按局部变量种)。
                                        我尝试着去除var 关键字,变成全局变量后就出现不正常。
                                        问题说明:这两种变化我不知道是什么原因造成的!我觉得这里声明局部或者全局变量
                                        的作用是一样的。都是为了重置~)希望有热心人解答一下,我弄好久没弄出来...*/
                     num = 0;                  
                     timer = null;
                     if(off ){
                      lastFn(500);
                      off = false;              
                    }else{
                      lastFn(0);
                      off = true;                        
                    };
                    function lastFn (target){
                        clearInterval(timer);
                        timer = setInterval(function(){
                             doMore(aDiv[num],'top',100,target);
                             num++;
                             if(num === len){
                               clearInterval(timer);
                             };                        
                        },30);                        
                    };
            };  
     
               function doMore (obj,attr,dir,target,endFn){
                    dir = parseInt(getStyle(obj,attr)) < target? dir :-dir;
                    clearInterval(obj.timer);
                    obj.timer = setInterval(function (){
                       var iSpeed = parseInt(getStyle(obj,attr))+dir;
                        if(iSpeed > target && dir > 0 || iSpeed < target && dir < 0){
                            iSpeed = target;
                            endFn && endFn();
                        };
                        obj.style[attr] = iSpeed+'px';
                    },30);
               };        
    };
    </script>

    </body>
</html>
搜索更多相关主题的帖子: javascript function absolute position 
2015-07-27 10:02
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8078
专家分:6657
注 册:2005-11-7
收藏
得分:10 
抱歉,没看出有什么不对的地方,并且我也试过,加不加var效果是一样的,并且我始终没弄明白,你想达到一个什么效果

本来无一物,何处惹尘埃
It is empty at all here, Why pm 2.5 is so TMD high!
2015-07-28 10:09
jsRank
Rank: 5Rank: 5
等 级:职业侠客
威 望:6
帖 子:69
专家分:303
注 册:2015-5-11
收藏
得分:10 
双击的时候,我们假设第一次点击为A,第二次点击为B。我们拿num变量为例说明:
如果num是局部变量,那么A会维护自己的num变量,B会维护自己的num变量。二者互不干扰。
如果num是全局变量,那么执行A时num=0,随后的代码执行代码num++,num++还未执行完毕,这时你又点击执行B操作,B又会执行num=0,由于num是全局变量,这将会导致A的num变为0,A的num++又从0开始。
全局变量造成二次点击不能维护属于自己的变量,势必互相干扰造成混乱。
timer也是这样。

追求卓越,成功就会跟着你走!
2015-07-28 12:41
快速回复:javascript 定时器和变量相关 忘好心人前辈帮忙看一下。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025396 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved