猿问

关于定时器的问题

    var i = 1;
        var timer = setInterval(function() {
          i++; //3 4 5 6
        console.log(i);
            }, 1000);

当i=1的时候 console.log(i)----3 4 5 6 7....

当I=0的时候 浏览器直接卡死 是为什么?我还是不太了解这个定时器有没有明白的



========================================================================

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style>
ul { margin:0; padding:0;}
li { list-style:none;}
#wrap { width:300px; height:200px; padding:20px;}
ul { width:300px; height:30px;}
ul li { width:70px; height:30px; line-height:30px; text-align:center; background:#69F; float:left; cursor:pointer;}
img { width:230px; height:170px; float:left;}
a { display:inline-block; width:70px; height:40px; line-height:40px; color:#000; text-align:center; background:#CCC; text-decoration:none;}
.active1 { background:#FF3;}
.active2 { background:#069;}
</style>
</head>

<body>
<div id="wrap">
    <ul>
        <li>菜单一</li>
        <li>菜单二</li>
    </ul>
    <img src="" />
    <a href="#"></a>
    <a href="#"></a>
    <a href="#"></a>
</div>
<script>
    var oUl=document.getElementsByTagName("ul")[0];
    var oLi=document.getElementsByTagName("li");
    var oImg=document.getElementsByTagName("img")[0];
    var aHref=document.getElementsByTagName("a");
    var arrText1=["图片一","图片二","图片三"];
    var arrText2=["图片四","图片五","图片六"];
    var arrUrl1=["img/1.jpg","img/2.jpg","img/3.jpg"];
    var arrUrl2=["img/1.png","img/2.png","img/3.png"];
    var num=0;
    var timer=null;
    //初始化
    oImg.src=arrUrl1[num];
    oLi[num].className="active1";
    aHref[num].className="active2";
    for (var i=0; i<aHref.length; i++) {
        aHref[i].innerHTML=arrText1[i%arrText1.length];
        }


    //菜单一
    for (var i=0; i<oLi.length; i++) {
    oLi[0].onclick=function () {
        for (var i=0; i<oLi.length;i++) {
            oLi[i].className="";
            }
        this.className="active1"
        oImg.src=arrUrl1[num];
        for (var i=0; i<aHref.length; i++) {
            aHref[i].innerHTML=arrText1[i%arrText1.length];
            aHref[i].className="";
            aHref[0].className="active2";
            }
        getMouse(arrUrl1);
            };    
           
        //aHref 公用样式   

    function getMouse(arrUrl) {    
        for (var i=0; i<aHref.length; i++) {
            aHref[i].index=i;

            //点击

           aHref[i].onclick=function () {
                for (var i=0; i<aHref.length; i++) {
                    aHref[i].className="";
                    }
                this.className="active2";
                oImg.src=arrUrl[this.index%arrUrl.length];
                }
                  
            //aHref 移入 
            aHref[i].onmouseover=function () {
                for (var i=0; i<aHref.length; i++) {
                    aHref[i].className="";
                    }
                this.className="active2";
                oImg.src=arrUrl[this.index%arrUrl.length];
                }               
        }
    }
    getMouse(arrUrl1);
    
    //菜单二        
    oLi[1].onclick=function () {
        for (var i=0; i<oLi.length;i++) {
            oLi[i].className="";
            }
        this.className="active1"
        for (var i=0; i<aHref.length; i++) {
            aHref[i].innerHTML=arrText2[i%arrText2.length];
            oImg.src=arrUrl2[num];
            aHref[i].className="";
            aHref[0].className="active2";
            }
        getMouse(arrUrl2);
        }

// 问题的原因:这种重复定时器的规则有两个问题:1.某些间隔会被跳过 2.多个定时器的代码执行时间可能会比预期小。


=======================================================================

   var timer=setInterval(getChange,1000);    
    function getChange () {
            for (var i=0; i<aHref.length; i++) {
                    aHref[i].className="";
                    }
            num++;    
            aHref[num].className="active2";
            
            console.log(num);
            if (num==arrUrl1.length) {
                for (var i=0; i<oLi.length;i++) {
                    oLi[i].className="";
                    }
                    oLi[1].className="active1"
                    num=-1;
                    oImg.src=arrUrl2[num];
                    
                }            
            }
=========================================================================


</script>
</body>
</html>

==================================================================

关于使用定时器 我设置的是num=0; 定时器每执行一次 num++; num初始值是0; 但是执行的时候 num的变化值是 


=================================================================

目前解决的代码:

var timer=setTimeout(function(){
        num++;
        
        if (num==arrUrl1.length) {
            for (var i=0; i<oLi.length;i++) {
                oLi[i].className="";
                }
                if (onOff) {
                    oLi[1].className="active1";
                    oImg.src=arrUrl2[num];
                    onOff=false;
                }
                else {
                    oLi[0].className="active1";
                    oImg.src=arrUrl1[num];
                    onOff=true;
                    }
                num=0;
                oImg.src=arrUrl2[num];    
                }

        for (var i=0; i<aHref.length; i++) {
            aHref[i].className="";
        }
            aHref[num].className="active2";
            for (var i=0; i<oLi.length; i++) {
            if (oLi[0].className!="") {
                oImg.src=arrUrl1[num];
                
            }
            else {
                
                oImg.src=arrUrl2[num];
                }
            }
    setTimeout(arguments.callee,1000);
},1000)




qq_已是回忆为何要苦苦追寻_03352366
浏览 1707回答 3
3回答

牛奶老哥哥

我的天哪,你怎么把函数申明什么的都写在最外面的for循环里了,那么一长串

qq_已是回忆为何要苦苦追寻_03352366

写的代码比较乱 见谅~~
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答