【发布时间】:2018-01-24 21:37:04
【问题描述】:
我有一个旅游服务,它返回一个解析为旅游对象的承诺。游览对象有一些场景,每个场景都有一些热点。在主视图的控制器中,我有一个“私有”_init() 函数,它等待游览解决,然后设置一些东西。
我使用的间隔应该是一个一个无限地在场景中随机播放,但我希望场景之间的延迟基于当前活动场景的热点数量,例如有 2 个热点的场景应该持续 7.5 秒,有 1 个热点的场景应该持续 5 秒,以此类推。
这是我目前所拥有的:
var i = 0, ready, scenesCount, activeScene, duration, transition = null;
_init();
// Later on down...
function _init()
{
ready = false;
AlexaTourApi.getTour( null).then( function ( res) {
$log.log( 'AlexaTourController got tour', res);
$scope.tour = res;
scenesCount = $scope.tour.scenes.length;
activeScene = 0;
duration = (getActiveScene().hotspots.length + 1) * 2500;
ready = true;
transition = $timeout( _doTransition(), duration);
});
}
function _doTransition()
{
activeScene = (i++ % scenesCount);
duration = (getActiveScene().hotspots.length + 1) * 2500;
transition = $timeout( _doTransition(), duration);
}
编辑:
我按照 quirimmo 的建议实现了一些新代码:
function _init()
{
ready = false;
AlexaTourApi.getTour( null).then( function ( res) {
$log.log( 'AlexaTourController got scenes', res);
$scope.tour = res;
scenesCount = $scope.tour.scenes.length;
activeScene = 0;
duration = (getActiveScene().hotspots.length + 1) * 2500;
ready = true;
_resetInterval();
});
}
function _resetInterval()
{
if ( transition !== null) {
$interval.cancel( transition);
}
duration = (getActiveScene().hotspots.length + 1) * 2500;
transition = $interval( _doTransition(), duration);
}
function _doTransition()
{
activeScene = (i++ % scenesCount);
}
直到现在我才收到f is not a function 异常。
【问题讨论】:
标签: javascript angularjs settimeout