繁体   English   中英

在循环中使用setInterval更改间隔

[英]Using setInterval in a loop to change interval

我在这里的第二个答案中使用该技术:

在运行时更改SetInterval的间隔

但未设置间隔的更改。 代码也使用OpenLayers 3:

        var coordinate, 
            i = 1,
            length = multipointCoords[0].length;

        var currentTime = tracksTime[0];
        var nextTime = tracksTime[1];
        speedOption = 100; // the highter this value, the faster the tracks, see next line
        var transitionTime = (nextTime - currentTime) / speedOption;

        var timer;

        timer = setInterval(function() {
            segmentConstruction(multipointCoords, tracksTime);
        }, transitionTime);

        function segmentConstruction(multipointCoords, tracksTime) {
            coordinate = ol.proj.fromLonLat(multipointCoords[0][i]);
            lineString.appendCoordinate(coordinate);

            if (i === length - 1) {
                clearInterval(timer);
            } else {
                i++;
                map.addLayer(trackLayer);
                clearInterval(timer);
                currentTime = tracksTime[i];
                nextTime = tracksTime[i + 1];
                timer = setInterval(function() {
                    segmentConstruction(multipointCoords);
                }, transitionTime);
            };
        };

我究竟做错了什么?

谢谢。

    var currentTime = tracksTime[0];
    var nextTime = tracksTime[1];
    speedOption = 100; // the highter this value, the faster the tracks, see next line
    var transitionTime = (nextTime - currentTime) / speedOption;

您可以在此处计算transitionTime。

        if (i === length - 1) {
            clearInterval(timer);
        } else {
            i++;
            map.addLayer(trackLayer);
            clearInterval(timer);
            currentTime = tracksTime[i];//<------------------|
            nextTime = tracksTime[i + 1];//<-----------------|
            timer = setInterval(function() {//               | 
                segmentConstruction(multipointCoords);//     |
            }, transitionTime);// <----------------------------->Not redefined
        };

在这里,您使用与上述相同的transitionTime,但尚未重新设置! 为什么不呢?这不是一个错误,但是...

我认为您的问题不是来自计时器,而是来自于参数。

这里是一个片段,您可以看到有关时间和间隔的代码没有问题:我只是删除了与“时间”和间隔无关的所有内容。

 var log = function(val){ console.log(val); document.getElementById('el').innerHTML+='<div><pre>' + val + '</pre><div>'; } var timer , i = 1 , length = 5 , transitionTime = 200 ; timer = setInterval(function() { log('first timerId : ' + timer); segmentConstruction() }, transitionTime ); function segmentConstruction(multipointCoords, tracksTime) { log(' \\tsegmentConstruction : i = ' + i + ' / ' + length); //if (i === length - 1) { if (i >= length - 1) { clearInterval(timer); log('\\t\\twe finish with : i = ' + i + ' / ' + length); } else { i++; clearInterval(timer); timer = setInterval(function() { log('loop timerId : ' + timer); segmentConstruction(); }, transitionTime); }; }; 
 <div id='el'></div> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM