当我添加img.style.opacity时,setTimeout()无法正常工作

时间:2014-12-01 13:15:09

标签: javascript settimeout opacity

我的HTML文件中有两张图片叠加在一起,并希望在JS文件中每隔3秒切换一次不透明度,以便在它们之间切换。我在没有" img.style.opacity"的情况下测试了JS文件。它在功能之间循环就好了。看起来像这样..

function Step1(){
    alert("Step 1");    

    setTimeout(Step2(), 3000);
}

function Step2(){
    alert("Step 2");

    setTimeout(Step1(), 3000);
}

它显示了"步骤1" > "步骤2" > "步骤1"每三个一个地方就是这样。

然后我加了一点,现在看起来像这样。

var img1 = document.getElementById('img1');
var img2 = document.getElementById('img2');

function Step1(){
    // alert("Step 1"); 
    img1.style.opacity = "0";
    img2.style.opacity = "1";
    setTimeout(Step2(), 3000);
}

function Step2(){
    //alert("Step 2");
    img1.style.opacity = "1";
    img2.style.opacity = "0";
    setTimeout(Step1(), 3000);
}

现在它只会运行Step1(),并且根本不会进入Step2()。

有点新的JS,很抱歉,如果答案是疯狂的简单。

3 个答案:

答案 0 :(得分:0)

目前,只要分别调用Step2()Step1(),就会调用Step1()Step2()。没有3秒等待。

你应该通过引用将函数传递给setTimeout()(I.E:没有括号):

var img1 = document.getElementById('img1');
var img2 = document.getElementById('img2');

function Step1(){
    // alert("Step 1"); 
    img1.style.opacity = "0";
    img2.style.opacity = "1";
    setTimeout(Step2, 3000);
}

function Step2(){
    //alert("Step 2");
    img1.style.opacity = "1";
    img2.style.opacity = "0";
    setTimeout(Step1, 3000);
}

JSFiddle

答案 1 :(得分:0)

简单地可以这样做

setInterval( function() { 
var img1 = document.getElementById('img1');
var img2 = document.getElementById('img2');

  if ( img1.style.opacity == "0"; ){
     img1.style.opacity = "1";
     img2.style.opacity = "0";
     }
    else if( img2.style.opacity == "0") {
     img1.style.opacity = "0";
     img2.style.opacity = "1";
     }
    else {
    img2.style.opacity = "0";
    img2.style.opacity = "1";
    }

}, 3000 );

确保在文档准备好后加载此间隔。

答案 2 :(得分:0)

尝试使用:

<script>
var img1;
var img2;

function Step1(){
     img1 = document.getElementById('img1');// after load of page these id's will be available get them in declared varaibles to use
     img2 = document.getElementById('img2');
    img1.style.opacity = "0";
    img2.style.opacity = "1";
    setTimeout(Step2, 3000);
}

function Step2(){
    //alert("Step 2");
    img1.style.opacity = "1";
    img2.style.opacity = "0";
    setTimeout(Step1, 3000);
}


</script>
<body onload="Step1()"> <!-- call your Step1() function after load of page-->

<img src="http://placehold.it/200x200" id="img1">
<img src="http://placehold.it/200x200" id="img2">
</body>