我没有找到任何本地方式来创建此动画。您可以使用setPosition将位置从当前点移动到最终点来创建自己的动画。下面是一个代码片段,给你一个想法:
var map = undefined;
var marker = undefined;
var position = [43, -89];
function initialize() {
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);
}
}
这或许可以被清理了一下,但会给你一个良好的开端。我正在使用JavaScript的setTimeout方法来创建动画。初始调用“过渡”会启动动画。 'transition'的参数是一个双元素数组[lat,lng]。 'transition'函数根据几个动画参数(numDeltas,delay)计算lat和lng的步长。然后它会调用'moveMarker'。函数'moveMarker'保持一个简单的计数器来指示标记何时到达最终目的地。如果不存在,它会再次自我调用。
下面是代码工作的的jsfiddle:http://jsfiddle.net/rcravens/RFHKd/13/
希望这有助于。
鲍勃
很好的解决方案!我修改了你的代码,以便能够以公里/小时的速度添加特定的速度:http://jsfiddle.net/pmrotule/9tfq5sqc/8/ – pmrotule 2015-06-17 01:27:03
@pmrotule伟大的。我试图修改以在标记上显示动态标签。但可能是因为它不断地改变标记,它没有显示。任何想法我可以继续? – 2018-01-23 11:26:48
@ User-8017771不是,我将不得不看你的代码。我想它会在你改变位置时隐藏标签。要完全控制你的标记的外观,你可以使用类似这样的东西https://github.com/aaronmiler/beer-map/blob/master/app/assets/javascripts/custom_marker.js – pmrotule 2018-01-23 11:39:14