2016-06-07 48 views
-1

我使用這個腳本從1處移動的谷歌地圖標記到另一個 源 Extend Google Maps marker to animate smoothly on update?從1個位置移動谷歌地圖標記到另一個順利

按我的邏輯這裏以前&電流之間的差異位置計算&除以數字(例如100)&將結果添加到前一個位置100次以到達當前位置。

但是,當我將下面給出的步數值(Num Deltas)從100更改爲例如4的任何其他數字&使循環運行4倍標記的位置後,該位置與當前位置不同。 可以在任何一個plaese建議我使用步驟(民三角洲)的號的重要性,因爲100 &沒有任何其他Number`

var latlng = new google.maps.LatLng(position[0], position[1]); 
var myOptions = { 
    zoom: 8, 
    center: latlng, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
}; 
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

marker = new google.maps.Marker({ 
    position: latlng, 
    map: map, 
    title: "Your current location!" 
}); 

google.maps.event.addListener(map, 'click', function(me) { 
    var result = [me.latLng.lat(), me.latLng.lng()]; 
    transition(result); 
}); 
} 

var numDeltas = 100; 
var delay = 10; //milliseconds 
var i = 0; 
var deltaLat; 
var deltaLng; 
function transition(result){ 
i = 0; 
deltaLat = (result[0] - position[0])/numDeltas; 
deltaLng = (result[1] - position[1])/numDeltas; 
moveMarker(); 
} 

function moveMarker(){ 
position[0] += deltaLat; 
position[1] += deltaLng; 
var latlng = new google.maps.LatLng(position[0], position[1]); 
marker.setPosition(latlng); 
if(i!=numDeltas){ 
    i++; 
    setTimeout(moveMarker, delay); 
} 
} 

下面是代碼工作的的jsfiddle:http://jsfiddle.net/rcravens/RFHKd/13/

回答

1

你問題是這條線:

function transition(result){ 
    i = 0; //<--THIS ONE 

你應該將它設置爲i = 1;。目前你正在做更多的動作,而不是你應該做的。當用100分割路徑時,它看起來並不那麼明顯,因爲它們之間的差別非常小,但是bug始終存在。或者,您可以更改結束條件。

+0

你是非常正確的這確實是這個錯誤,但你可以檢查JS小提琴http://jsfiddle.net/rcravens/RFHKd/13/它正在與我= 0工作;這是使條件對我來說更糟&這個答案已被標記爲正確的答案http://stackoverflow.com/questions/5892113/extend-google-maps-marker-to-animate-smoothly-on-update –

+0

即使明顯的答案可能有錯誤。並且您提到的小提琴無法正常工作,您可以看到,如果您單擊地圖,標記的位置會略微偏離應有的位置。嘗試點擊半個世界。無論如何,只要在兩個地方「i = 1」。它工作嗎? –

相關問題