jen*_*irf 0 javascript listener javascript-events google-maps-api-3 google-maps-markers
我有一个点击我的每个标记调用函数displayInfo,自定义信息框的听众..
google.maps.event.addListener(markers[i], 'click', function() {
//stop updating markers
google.maps.event.removeListener(updateMarkersProcess);
//call display custom infowindow function
displayInfo(this);
});
Run Code Online (Sandbox Code Playgroud)
我的地图上有一个bounds_change监听器,用于将自定义信息框"绑定"到标记.像这样:
function displayInfo(marker) {
var e = $('infobox');
overlay.getPanes().floatPane.appendChild(e);
displayInfoProcess = google.maps.event.addListener(map, 'bounds_changed', function() {
show('infobox');
var markerOffset = overlay.getProjection().fromLatLngToDivPixel(marker.position);
e.style.top = markerOffset.y + 20 + 'px';
e.style.left = markerOffset.x - 40 + 'px';
e.innerHTML = marker.store + '<br><em>' + convertDistance(marker.distance);
});
map.panTo(marker.position);
}
Run Code Online (Sandbox Code Playgroud)
然后我在地图上有一个点击监听器来隐藏infoBox并停止bounds_change监听器......
[删除此处的聆听代码]
google.maps.event.addListener(map, 'click', function() {
google.maps.event.removeListener(displayInfoProcess);
// google.maps.event.clearListeners(map, 'bounds_changed');
hide('infobox');
});
Run Code Online (Sandbox Code Playgroud)
这隐藏了infoBox,但事实是,这似乎并没有删除监听器.这是日志中的打印件:
//在点击标记之前(没有监听器)
displayInfoProcess null
//单击标记(监听器)后
displayInfoProcess Ue b:qh d:"bounds_changed"e:function(){id:1480 j:null l:0 proto:Ue
//点击地图后(仍然是一个听众)
displayInfoProcess Ue b:null d:"bounds_changed"e:null id:1480 j:null l:0 proto:Ue
如果我......让事情变得非常奇怪
1)单击标记 这显示infoBox1
2)单击另一个标记 这显示infoBox2而不是1
3)单击地图 这会隐藏infoBox2
4)平移地图
来自FIRST标记的信息框(1)显示!!
有补救措施吗?
正在删除侦听器引用(查看b:
和e:
属性,它们都是null),剩下的只是一个shell.如果在您尝试平移地图的任何时候没有删除侦听器,它将捕捉回添加侦听器的标记.
由于您似乎正在使用displayInfoProcess事件显示信息框,我将使用google.maps.event.addListenerOnce()这将在执行后立即删除侦听器.
function displayInfo(marker) {
google.maps.event.addListenerOnce(map, 'bounds_changed', function() {
//set infobox info...
});
map.panTo(marker.position);
}
Run Code Online (Sandbox Code Playgroud)
我个人不喜欢click
在地图上使用这个活动.当用户点击地图上的他们通常试图平移地图,所以我用dragstart
,drag
和dragend
事件来代替.通过使用该dragstart
事件,您无需在尝试平移地图之前释放鼠标按钮.
以下是使用addListenerOnce
和的示例dragstart
:http://jsfiddle.net/bryan_weaver/vPN7R/
归档时间: |
|
查看次数: |
4714 次 |
最近记录: |