上一个函数完成之前执行的Javascript函数

上一个函数完成之前执行的Javascript函数

问题描述:

我在下面的代码中遇到了一些问题。这是我打电话给我开发的一个简单游戏上的一些资产上创建FadeIn和FadeOut动画的函数,它使用了很好的CreateJS库。我需要一次为资产运行此代码,然后在第一个功能完成时通过anohter资产运行它。功能如下:上一个函数完成之前执行的Javascript函数

function fadeInOut(asset, duration, stage) 
    { 
     stage.addChild(asset) 
     let fadeInOut = setInterval(function() 
     { 
     asset.alpha += 1/24; 
     if (asset.alpha >= 1) 
     { 
      asset.alpha = 1; 
      setTimeout(function() 
      { 
      let fadeOut = setInterval(function() 
      { 
       asset.alpha -= 1/24; 
       if (asset.alpha <= 0) 
       { 
       asset.alpha = 0; 
       stage.removeChild(asset); 
       clearInterval(fadeOut); 
       } 
      }, 1000/24) 
      }, 1000 * duration) 
      clearInterval(fadeInOut); 
     } 
     }, 1000/24) 
    } 

而且我调用这个函数的方式是这样的:

fadeInOut(assets.eiko, 2, stage); 
    fadeInOut(assets.logo, 3, stage); 

我真的不明白为什么给函数的第二个呼叫同时与运行第一。

希望你能帮助我,因为这对我来说是一个非常重要的项目。

预先感谢您。

+0

那怎么JavaScript的工作......你的setInterval调用同时运行 - 你需要把你的第二个电话里面最内层setInterval或其他......但如果你希望得到更好的帮助,你应该首先简化问题。看看[mcve] –

+0

好的,非常感谢,我会研究一下。 –

+1

考虑使用TweenJS(或补间库)淡入/淡出内容。 TweenJS有一个很棒的API来完成这样的事情。 – Lanny

恕我直言,你需要这样的事情,我做了两个方法例如:)

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="UTF-8"> 
<title>Example</title> 
<script src="https://code.createjs.com/createjs-2015.11.26.min.js"></script> 
<script> 
function init() 
{ 
    var stage = new createjs.Stage("canvas"); 
    createjs.Ticker.setFPS(24); //set some FPS 
    createjs.Ticker.addEventListener("tick", stage); //set autiomatic refresh 

    //draw some circles for the example usage 
    var circle1 = new createjs.Shape(); 
    circle1.graphics.beginFill("#FF0000").drawCircle(0,0,50); 
    circle1.x=100; 
    circle1.y=100; 
    circle1.alpha=0; 
    stage.addChild(circle1); 

    var circle2 = new createjs.Shape(); 
    circle2.graphics.beginFill("#0000FF").drawCircle(0,0,50); 
    circle2.x=300; 
    circle2.y=100; 
    circle2.alpha=0; 
    stage.addChild(circle2); 

    //first version with function call after the first animation 
    createjs.Tween.get(circle1).to({alpha:1},1000).to({alpha:0},1000).call(
     function() 
     { 
      createjs.Tween.get(circle2).to({alpha:1},1000).to({alpha:0},1000) 
     } 
    ); 

    //seconds version: with delay instead of onComplete function, comment first version above, uncomment code below and try 
    /* 
    createjs.Tween.get(circle1).to({alpha:1},1000).to({alpha:0},1000); 
    createjs.Tween.get(circle2).wait(2000).to({alpha:1},1000).to({alpha:0},1000) 
    */ 


} 
</script> 
</head> 
<body onload="init();"> 
    <canvas id="canvas" width="600" height="400"></canvas> 
</body> 
</html>