如何将flyTo()与setInterval()或setTimeout()Javascript函数一起正确使用?

如何将flyTo()与setInterval()或setTimeout()Javascript函数一起正确使用?,javascript,leaflet,settimeout,setinterval,Javascript,Leaflet,Settimeout,Setinterval,我在组合传单函数flyTo()与函数setTimeout()和setInterval()时遇到了一个小问题 我正试图让我的互动地图在我的国家(克罗地亚)上空精确的坐标和精确的缩放。问题是我无法获得循环飞行路线的代码(萨格勒布-奥西耶克-斯普利特-里耶卡) 希望有人能给我指出正确的方向:)谢谢 我已经用while循环中的计数器和for循环中的计数器进行了尝试,但效果并不理想 <script> var intervalZg = setInterval(Zagreb, 500

我在组合传单函数flyTo()与函数setTimeout()和setInterval()时遇到了一个小问题

我正试图让我的互动地图在我的国家(克罗地亚)上空精确的坐标和精确的缩放。问题是我无法获得循环飞行路线的代码(萨格勒布-奥西耶克-斯普利特-里耶卡)

希望有人能给我指出正确的方向:)谢谢

我已经用while循环中的计数器和for循环中的计数器进行了尝试,但效果并不理想

<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。。。应该没问题。确保你的循环正常