javascript - AngularJS 等待超时功能完成后再继续

标签 javascript angularjs synchronization

我正在使用 AngularJS 构建一个 Web 应用程序,并尝试创建一个过渡动画。当按下按钮时,内容将淡出超过 200 毫秒,更改为新内容,然后再次淡入超过 200 毫秒。下面是 ng-click 按钮调用的函数。

$scope.homeButton = function(){
	fadeOut();
	$scope.content="dolor sit amet";
	fadeIn();
	resetButtons();
	$scope.homeButtonSrc = "res/homebuttonselected.png";
};

但是,当调用该函数时,内容立即发生变化,然后淡出。再次单击该按钮可在淡入和淡出动画之间来回切换。 fadeIn() 和 fadeOut() 如下所示。

var fadeOut = function fadeOut(){
	var countDown = function(){
		$scope.contentOpacity -= .01;
		if($scope.contentOpacity > 0){
			$timeout(countDown, 2);
		}
	}
	$timeout(countDown, 2);
}
var fadeIn = function fadeIn(){
	var countUp = function(){
		$scope.contentOpacity += .01;
		if($scope.contentOpacity < 1){
			$timeout(countUp, 2);
		}
	}
	$timeout(countUp, 2);
}

如有任何帮助,我们将不胜感激!

最佳答案

您没有在代码中使用 promise ,这些 promise 默认由 $timeout 函数给出。 因此,您的代码仅使用 2ms 的间隔,而不是 200ms。

尝试像这样更改您的代码:

$scope.homeButton = function(){
   fadeOut().then(function(){
      $scope.content="dolor sit amet";
      fadeIn().then(function(){
         resetButtons();
         $scope.homeButtonSrc = "res/homebuttonselected.png";
      });
   });
};

以及您的 fadeIn() 和 fadeOut 函数..

var fadeIn = function fadeIn(){
   var countUp = function(){
       $scope.contentOpacity += .01;
       if($scope.contentOpacity < 1){
           $timeout(countUp, 2);
       }
   }
   return $timeout(countUp, 200); //return here it's important
}
//same for fadeOut...

但这里真正的答案是使用 ng-animate 在 angularjs 上执行动画。 请参阅docs有关更多信息,我真的建议您走这条路。

关于javascript - AngularJS 等待超时功能完成后再继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39057572/

相关文章:

javascript - 将更新绑定(bind)到链接内的指令元素,而不是内联 <el someattr ="{{val}}"></el>

javascript - javascript正则表达式如何处理新行

javascript - AngularJS $scope 变量仅通过 HTTP GET 设置一次

angularjs - 即使正在编辑输入,表单也未设置为 $dirty

javascript - 如何让元素后面的滚动条

javascript - 多个 Rhino (java) 线程操作同一个文件

javascript - 如何从父 View 调用 subview 方法?

javascript - 显示瞬时选中的单选按钮的数量

recursion - 通过 WaitGroup 编排递归快速排序调用

java - 用java编写一个自定义类Mutex?