除非用户将鼠标移到地图上,否则我试图让谷歌地图连续平滑过度。使用'idle'事件处理程序会导致波动的平移动画。使用其他事件不会给我结果。我的initPan()
函数的递归只会导致页面崩溃。 “空闲”连续平移方法here的示例。
function initialize() {
var myOptions = {
zoom: 5,
center: markers.sanjose,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById('map_canvas'),
myOptions);
google.maps.event.addListener(map, 'idle', function() {
initPan(map);
});
google.maps.event.addListener(map, 'mouseout', function() {
stopPan(map);
});
}
function initPan(map) {
map.panBy(5, 0);
}
function stopPan(){
}
答案 0 :(得分:5)
不是很多观点,没有评论,但如果有人遇到过这种情况,这是我的解决方案。
在用户事件(例如panBy()
)触发重复方法时,我遇到了API V3的问题。虽然V2有'moveend'事件,但它被'idle'事件取代。但是,在发生平移后,“空闲”有一个短暂的延迟。另一种选择是使用'bounds_changed'事件,但此事件每秒触发多次,导致地图永远不会加载切片(因此没有平移外观)。
我终于通过向'bounds_changed'添加超时延迟解决了这个问题,清除了多个事件触发器上的堆栈超时。这是解决问题的代码段。
google.maps.event.addListener(map, 'bounds_changed', function() {
if (moving) {
if (myTimeout) {
window.clearTimeout(myTimeout);
}
myTimeout = window.setTimeout(initPan(map), 2200);
}
});
我在API forum上找到了解决方案,您可以看到我的工作连续平移here的示例。如果这没有任何意义,请查看示例中的完整代码,祝你好运。