[英]Using setInterval in a loop to change interval
我在这里的第二个答案中使用该技术:
但未设置间隔的更改。 代码也使用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.