1

マーカーが1つずつ追加されていることを示すことにより、Googleマップに「強制アニメーション」を実装しようとしています。

このために、次のコードを使用しました。

function Marker(i) {
    if(i > locations.length) return;                
    var populationOptions = {
         strokeColor: '#FF0000',
         strokeOpacity: 0.8,
         strokeWeight: 2,
         fillColor: '#FF0000',
         fillOpacity: 0.35,
         map: map,
         center: citymap[locations[i][1]].center,
         radius: citymap[locations[i][1]].population
    };
    cityCircle = new google.maps.Circle(populationOptions);

    var t = setTimeout("Marker("+(i+1)+")",2000);
}
Marker(0);

この例は次から取得しました: Hereですが、Firebug によると、関数 Marker は setTimeout(); の行で定義されていません。

何か案は?

更新されたコード:

function Marker(city) {
    alert(city);
    var populationOptions = {
        strokeColor: '#FF0000',
        strokeOpacity: 0.8,
        strokeWeight: 2,
        fillColor: '#FF0000',
        fillOpacity: 0.35,
        map: map,
        center: citymap[city].center,
        radius: citymap[city].population
    };
    cityCircle = new google.maps.Circle(populationOptions);
}

for (city in citymap) {
    var t = setTimeout(function(){Marker(city);},2000);
}

Marker が呼び出されるたびに 2 秒の遅延があると想定していましたが、そうではありません。2秒待って一気に実行。また、「都市」は更新されず、citymap の都市の数の x 倍の同じマーカーが追加されます。

for サイクルはタイムアウトが終了するのを待ちませんか?

4

2 に答える 2

2

新しい都市を 2 秒ごとに追加し、citymap 内のすべての項目の処理が完了した後でもマーカー関数の呼び出しを繰り返さない場合は、次のようにします (グローバル カウンター変数も削除します)。

function Marker(count) {
    city = Object.keys(citymap)[count];
    console.log(city);
    var populationOptions = {
        strokeColor: '#FF0000',
        strokeOpacity: 0.8,
        strokeWeight: 2,
        fillColor: '#FF0000',
        fillOpacity: 0.35,
        map: map,
        center: citymap[city].center,
        radius: citymap[city].population
    };
    cityCircle = new google.maps.Circle(populationOptions);
    count++;
    if(count<citymap.length){
        setTimeout(function(){Marker(count);},2000);
    }
}
Marker(0);
于 2013-05-08T09:31:10.807 に答える
1

このようなものを使用してください

var count = 0;
function Marker() {
    city = Object.keys(citymap)[count];
    alert(city);
    var populationOptions = {
        strokeColor: '#FF0000',
        strokeOpacity: 0.8,
        strokeWeight: 2,
        fillColor: '#FF0000',
        fillOpacity: 0.35,
        map: map,
        center: citymap[city].center,
        radius: citymap[city].population
    };
    cityCircle = new google.maps.Circle(populationOptions);
    count++;
}
var i =1;
for (var city in citymap) {
    var t = setTimeout(function(){Marker();},i*2000);
    i++;
}

そして、citymap をvar citymap = {}..と宣言しました。38var citymap = [];行目のように変更します。

于 2013-05-08T10:00:39.933 に答える