我在带有链接街景的V3地图上有两个事件处理程序。 (使用map.setStreetView(全景)链接;)一个是检测地图上的单击,在这种情况下,我更新HTML字段以显示该点的纬度/经度。另一种方法是检测要更改的全景图的位置(position_changed),以便我可以更新HTML字段以显示全景图的纬度/经度。
问题是当我通过拖动街景小人改变全景图时,当我释放鼠标按钮时会触发点击事件。因此,HTML中的两组字段都会被更改,而不仅仅是全景位置。
我试图通过在点击事件发生时测试当前和之前的全景位置来停止它,但似乎全景位置更改事件在点击事件之前触发,这意味着全景的前一个和当前位置已经设置到新位置。
我尝试将单击事件更改为双击,但这也会导致地图放大,这是我不想要的。
我基本上想要的是,如果拖拽的街景小人造成点击事件不触发,或者某种方式检测到他刚被拖动。我想有一种方法是将最后一次全景变化的时间存储在position_change事件中,然后检查触发click事件的时间多久,但这看起来有点hacky。
这是我的两个事件的代码:
google.maps.event.addListener(map, 'click', function (e) {
document.getElementById('mappos').innerHTML = e.latLng.lat().toFixed(6) + "," + e.latLng.lng().toFixed(6);
});
google.maps.event.addListener(panorama, 'position_changed', function() {
streetvpos = panorama.getPosition();
document.getElementById('svpos').innerHTML = streetvpos.lat().toFixed(6) + "," + streetvpos.lng().toFixed(6);
});
为了别人的利益,我提出了一个有效的解决方案。我做了一些测试,发现在一个典型的街头小人拖拽上,点击事件几乎立即触发,但是全景位置改变事件需要大约250ms来触发。因此,我在click事件处理程序中使用一个计时器将它延迟1秒,然后检查发生全局更改的时间。通常它大约是750毫秒前。如果它超过2秒,我认为这是一次真正的点击,而不是一个街头小人的行动。
var lastsvchg = 0; // at the top
// ...
// add a click event handler to give lat/long. Have to cater for the fact that dragging the streetview pegman also triggers a click event
google.maps.event.addListener(map, 'click', function (e) {
setTimeout(function() { // wait 0.5 seconds to let pano_changed trigger first in case pegman being dragged
if (new Date() - lastsvchg > 2000) { // ignore if due to pegman being dragged in last 2 seconds
document.getElementById('mappos').innerHTML = e.latLng.lat().toFixed(6) + "," + e.latLng.lng().toFixed(6);
}
}, 1000); // wait 1 second before testing
});
// detect changes to streetview position. Could use position_changed event also.
google.maps.event.addListener(panorama, 'pano_changed', function() {
lastsvchg = new Date(); // to check if click event triggered by pegman move
svpos = panorama.getPosition();
document.getElementById('svpos').innerHTML = svpos.lat().toFixed(6) + "," + svpos.lng().toFixed(6);
});
答案 0 :(得分:0)
您是否只是将click事件绑定到地图容器,或者您是否使用了正确的函数`google.maps.event.trigger()'每次点击活动?
您可以在this
查看http://gmaps-samples-v3.googlecode.com/svn/trunk/map_events/map_events.html页面的来源