动态更改Angular的$ interval延迟

时间:2017-08-16 16:27:35

标签: javascript angularjs settimeout

我有一个巡回服务,它返回一个解析为tour对象的promise。巡视对象有一些场景,每个场景都有一些热点。在主视图的控制器中,我有一个“私有”_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例外。

0 个答案:

没有答案