1

所以我从昨天下午开始就一直在处理这件事。我已经对基本代码进行了各种迭代,试图得到我想要的结果(我想每隔 xx 毫秒按顺序删除标记),但没有任何效果。我得到的结果是他们要么一次全部走,要么根本不走。我相当确定“根本不是”问题是由于我纠正并得到“一次全部”的语法错误造成的。

所以这里的功能...

    function marker(location) 
    {

        geocoder = new google.maps.Geocoder();
        var latlng = new google.maps.LatLng(37.5, -98.35);
        var mapOptions = 
        {
            zoom: 5,
            center: latlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        }

        map = new google.maps.Map(document.getElementById('googleMap'), mapOptions);

        var infowindow = new google.maps.InfoWindow(), marker, i;

        for (i = 0; i < location.length; i++) 

        {


            marker = new google.maps.Marker(
            {
                position: new google.maps.LatLng(location[i][1], location[i][2]),
                animation: google.maps.Animation.DROP,
                map: map
            }
            );


            google.maps.event.addListener(marker, 'click', (function (marker, i) 
            {

                return function () 
                {
                    infowindow.setContent(location[i][0]);
                    infowindow.open(map, marker);
                }

            }
            )(marker, i));


        }

    }

我认为我应该做的是在for内,像这样......

        for (i = 0; i < location.length; i++) 

        {
           setTimeout(function() { 

            marker = new google.maps.Marker(
            {
                position: new google.maps.LatLng(location[i][1], location[i][2]),
                animation: google.maps.Animation.DROP,
                map: map
            }
            );


            google.maps.event.addListener(marker, 'click', (function (marker, i) 
            {

                return function () 
                {
                    infowindow.setContent(location[i][0]);
                    infowindow.open(map, marker);
                }

            }
            )(marker, i));
            }, 1000)
        }

但这不起作用,我尝试过的其他事情也没有。我看过很多解释,其中大部分似乎都有意义,但我无法弄清楚这一点,我认为这更多的是关于 for 循环而不是其他任何东西。

例如,我还尝试将 addlistener 封装在 setTimeout 中,我想如果我运行 addlistener 代码并等待它会起作用。我想我在哪里是我需要想出一种方法来跳出循环并等待被调用的函数返回一些东西,但我不知道该怎么做。

如果有人能告诉我我是否在正确的轨道上,我会很感激。

4

1 回答 1

1

如果您不想一次获得所有结果,则需要给出不同的时间,因为循环会立即执行,并且所有超时都是从执行时间开始计算的:

setTimeout(function() { 

}, 1000*i);

并且为了避免所有迭代使用相同的值的问题i,在闭包中使用

for (i = 0; i < location.length; i++) {
   (function(i){
       setTimeout(function() { 

       }, 1000*i);
   })(i);
}
于 2013-01-25T16:49:29.460 回答