使用回调功能在谷歌地图上放置多个标记
Place multiple markers on google map with callback function
我想在Gmap API上实现一个功能,如果缩放比例超过17,则显示所有标记(否则,只需隐藏它们)。但是,当我编写如下代码时,它只是不起作用。
PS:代码在语法和排列上可能并不完全正确,但它表达了我的意思
// @latlong is an array of tuple (latitude , longtitude)
// @myMap is the google map object passed to the function
function placeMarker( myMap , latlon)
{
for(var i = 0 ; i < latlon.length ; i ++)
{
myMarker = new google.maps.Marker( {
position: new google.maps.LatLng(latlon[i][0], latlon[i][1])
});
google.maps.event.addListener(myMap, 'zoom_changed', function() {
zoomLevel = myMap.getZoom()
if(zoomLevel >= 17)
{
myMarker.setMap(myMap)
}
else
{
myMarker.setMap(null)
}
});
}
}
我只是将我的代码更改为:
function placeMarker( myMap , latlon)
{
for(var i = 0 ; i < latlon.length ; i ++)
{
myMarker = new google.maps.Marker( {
position: new google.maps.LatLng(latlon[i][0], latlon[i][1])
});
(function(myMarker_copy){
google.maps.event.addListener(myMap, 'zoom_changed', function() {
zoomLevel = myMap.getZoom()
if(zoomLevel >= 17)
{
myMarker_copy.setMap(myMap)
}
else
{
myMarker_copy.setMap(null)
}
});
}(myMarker));
}
}
第二个版本有效。我知道如何让它工作,但是,我真的不知道为什么它有效,为什么另一个不工作。也许这与JS的函数闭包或参数传递原则有关(我检查了很多参考资料,但其中一些只是持有不同的想法)。有人可以帮我吗?
真的很感激。
第一个不起作用的例子:有一个全局变量myMarker
和许多事件侦听器,它们最后都在一个标记上运行,这就是在循环中最后一个创建的标记。
第二个确实有效的示例:由于闭包,每个事件侦听器都会接收自己的标记变量的本地副本。因此,当调用事件侦听器时,它具有正确的标记值。
相关文章:
- Facebook股票计数,暂停直到回调功能结束
- Bootbox:取消对话框后的回调功能/点击'X'按钮
- 谷歌登录无法识别登录 角度中的回调功能
- JQuery AJAX没有't获得成功回调功能
- 如何在 jquery/js 中模仿此回调的功能
- 为我的简单 JavaScript 函数添加回调功能
- 异常捕获在功能上是否与承诺错误回调相同
- 所有节点都是“;回调”;潜在异步功能
- twitter共享回调功能不再工作了吗
- Auth0 Lock没有触发鉴权回调功能
- 在JavaScript类中添加回调功能
- 传单js地图初始化和回调功能
- Titanium Appcelerator回调功能在Android中不起作用
- 使用webpack时,谷歌地图无法访问回调功能
- JavaScript回调功能失败
- JS/Jquery条件,无回调功能
- 谷歌标签管理器中回调功能上的广告词转换跟踪
- 使用回调功能在谷歌地图上放置多个标记
- 回调功能的优点,用简单的英语和真实的例子
- 需要回调功能