如何将flyTo()与setInterval()或setTimeout()Javascript函数一起正确使用?
我在组合传单函数flyTo()与函数setTimeout()和setInterval()时遇到了一个小问题 我正试图让我的互动地图在我的国家(克罗地亚)上空精确的坐标和精确的缩放。问题是我无法获得循环飞行路线的代码(萨格勒布-奥西耶克-斯普利特-里耶卡) 希望有人能给我指出正确的方向:)谢谢 我已经用while循环中的计数器和for循环中的计数器进行了尝试,但效果并不理想如何将flyTo()与setInterval()或setTimeout()Javascript函数一起正确使用?,javascript,leaflet,settimeout,setinterval,Javascript,Leaflet,Settimeout,Setinterval,我在组合传单函数flyTo()与函数setTimeout()和setInterval()时遇到了一个小问题 我正试图让我的互动地图在我的国家(克罗地亚)上空精确的坐标和精确的缩放。问题是我无法获得循环飞行路线的代码(萨格勒布-奥西耶克-斯普利特-里耶卡) 希望有人能给我指出正确的方向:)谢谢 我已经用while循环中的计数器和for循环中的计数器进行了尝试,但效果并不理想 <script> var intervalZg = setInterval(Zagreb, 500
<script>
var intervalZg = setInterval(Zagreb, 5000);
var intervalOs = setInterval(Osijek, 10000);
var intervalSt = setInterval(Split, 15000);
var intervalRi = setInterval(Rijeka, 20000);
function Osijek(){
mymap.flyTo([45.554614, 18.696247], 13);
}
function Zagreb(){
mymap.flyTo([45.806367, 15.982061], 13);
}
function Split(){
mymap.flyTo([43.511787, 16.440155], 13);
}
function Rijeka(){
mymap.flyTo([45.327369, 14.440395], 13);
}
function Pula(){
mymap.flyTo([44.867527, 13.850097], 13);
}
function regijaSjever(){
mymap.flyTo([45.638587, 17.378766], 8.75);
}
function regijaJug(){
mymap.flyTo()
}
function regijaZapad(){
mymap.flyTo()
}
</script>
var intervalZg=设定间隔(萨格勒布,5000);
var intervalOs=设定区间(Osijek,10000);
var intervalSt=设定间隔(分割,15000);
var intervalRi=设定区间(Rijeka,20000);
函数Osijek(){
mymap.flyTo([45.554614,18.696247],13);
}
萨格勒布函数(){
mymap.flyTo([45.806367,15.982061],13);
}
函数拆分(){
mymap.flyTo([43.511787,16.440155],13);
}
函数Rijeka(){
mymap.flyTo([45.327369,14.440395],13);
}
函数Pula(){
mymap.flyTo([44.867527,13.850097],13);
}
函数regijaSjever(){
mymap.flyTo([45.638587,17.378766],8.75);
}
函数regijaJug(){
mymap.flyTo()
}
函数regijaZapad(){
mymap.flyTo()
}
现在,这个密码确实会飞,他先去萨格勒布,然后是奥西耶克,然后分裂,然后是里耶卡,然后回到萨格勒布,在那里停下来。你现在每5秒飞一次萨格勒布,每10秒飞一次奥西耶克,等等。所以你第一次飞到奥西耶克,你也会打电话给萨格勒布 可能在每个位置设置下一个位置。。。所以
function Zagreb() {
mymap.flyTo([45.806367, 15.982061], 13);
setTimeout(Osijek, 5000);
}
function Osijek() {
mymap.flyTo([45.554614, 18.696247], 13);
setTimeout(Split, 5000);
}
function Split() {
mymap.flyTo([43.511787, 16.440155], 13);
setTimeout(Rijeka, 5000);
}
function Rijeka() {
mymap.flyTo([45.327369, 14.440395], 13);
setTimeout(Zagreb, 5000);
}
Zagreb();
仅使用一个
setInterval
调用的方法如下所示:
// Set up data - an array with the LatLng and the zoom levels for each call
var flights = [
{ latlng: [45.554614, 18.696247], zoom: 13 },
{ latlng: [45.806367, 15.982061], zoom: 13 },
{ latlng: [43.511787, 16.440155], zoom: 13 },
{ latlng: [45.327369, 14.440395], zoom: 13 },
{ latlng: [44.867527, 13.850097], zoom: 13 },
{ latlng: [45.638587, 17.378766], zoom: 8.75 }
];
var flightNumber = 0;
setInterval(function() {
// flyTo the n-th flight destination...
map.flyTo( flights[flightNumber].latlng, flights[flightNumber].zoom );
// The next iteration should fly to the next flight destionation...
flightNumber++;
// ...unless we've passed the last flight destination, in which case go
// back to the first one.
// Remember that JS arrays are zero-indexed, so the first element is zero and
// the last valid element is the (length - 1)-th, hence ">=" instead of ">".
if (flightNumber >= flights.length) {
flightNumber = 0;
}
}, 5000);
当然,这种技术也有不同的变体,使用不同的数据结构(例如添加名称、没有缩放级别等),并使用模运算符(
%
)而不是检查数组长度(例如i=i%length
)。萨格勒布每5秒执行一次,而其他的每10、15和20秒执行一次。所以,你可能会有一些奇怪的重叠呼叫,萨格勒布可能会随机取消之前的呼叫。是的,就是这样。我可以看到地图一点也没有停下来,很抱歉提供了错误的信息。我想看到的是,我可以让飞行的模式随着时间的推移而重复。现在它就像斯普利特-萨格勒布-斯普利特-奥西耶克-里耶卡-奥西耶克一样,随机飞行,带有时间戳。哇,太棒了。我一点也没想到。它在第一次迭代时工作得很好,但在完成最后一个区域后,它每秒钟都会飞到任何地方。让我们说它变得像塔斯马尼亚魔鬼。有没有办法解决这个问题?用一些循环什么的?只要它是Z>O>s>R>Z。。。应该没问题。确保你的循环正常