2012-11-30 51 views
0

這是推動我香蕉動畫熱圖...對於谷歌,地圖的API-3

我使用谷歌地圖API V3,與熱圖。我已經成功繪製了數據點,沒有問題。但是,我想要一個無限循環的動畫。目前,我有以下代碼。 (地圖出現,但沒有任何數據點。)

var _data = []; 
pointArray = new google.maps.MVCArray(_data); 
var heatmap = new google.maps.visualization.HeatmapLayer({ 
    data: pointArray, 
}); 

heatmap.setData(_data); 
heatmap.setMap(map); 

play = function(){ 
    for(var j = 0; j < data_arr.length; j++){ 
     pointArray.clear(); 

     for(var i = 0; i < data_arr[j].length; i++){ 
      pointArray.push(new google.maps.LatLng(data_arr[j][i]['lat'], data_arr[j][i]['lon'])); 
     } 

     setInterval(function(){ 
      play(); 
     }, 3000); 
    } 
} 

google.maps.event.addListenerOnce(map, "idle", function(){ 
    play(); 
}); 

任何幫助,都是最受歡迎的!

+0

你能發佈一個你嘗試過的鏈接嗎?如果它不在實時Web服務器上,請使用JSFiddle。 –

+0

絕對:http://jsfiddle.net/T5RrR/1/ – maximus

回答

2

問題是熱圖數據不會更新,直到當前正在執行的腳本暫停。到那時,所有的數據變化都已經完成,所以沒有任何動畫。

不幸的是,這意味着簡單的方法是行不通的。您不必直接在循環中更改數據,而必須將數據分成動畫步驟,只更改一些數據點,然後使用setTimeout調用鏈中的下一步。這會暫停,以便圖書館有機會真正進行您指定的更改。

此外,您使用setInterval是不正確的(我相信你的意思是在這種情況下setTimeout)。您正在循環呼叫setInterval,並且從不清除它。循環的每次迭代都會導致一個新的定時執行,以便您不需要很長的時間就可以有數百個時間間隔來調用您的play函數。 setTimeout只會再執行一次。

+0

它花了幾天的工作,但得到它運行。謝謝乍得! – maximus

+0

小提琴似乎沒有工作,但看起來像超時代碼已被添加,這是否工作? – chrismarx