Google Maps(JS)开发入门(9):事件监听中使用闭包
发布时间: 2013-12-30
所属分类: Google Maps开发教程(JS)
闭包是javascript语言中一项特有的性质,也是js中的难点与重点,当然本文的重点不是讨论javascript语言的特性与方法。本文将提供一种javascript闭包的Google maps应用方法(事件监听),如果你能通过本文了解js闭包的特性,那将是再好不过的了。
核心代码
var map; function initialize() { var tw=new google.maps.LatLng(25.091075 , 121.55983449999997); var mapOptions = { zoom: 10, center: tw }; map = new google.maps.Map(document.getElementById('map-canvas'),mapOptions); //随机添加5个坐标点 for(var i=0;i<5;i++){ var position=new google.maps.LatLng( tw.lat()+0.1*Math.random(0,1), tw.lng()+0.1*Math.random(0,1) ); var marker=new google.maps.Marker({ position:position, map:map }); marker.setTitle(i.toString()); addmessage(marker,i);//闭包 } } function addmessage(marker, num) { var message = ['事', '件', '的', '监', '听']; var infowindow = new google.maps.InfoWindow({ content: message[num] });google.maps.event.addListener(marker, 'click', function() {
infowindow.open(marker.get('map'), marker);
});
}
代码解释
addmessage(marker,i);//闭包
这里是函数的函数,产生了闭包。
效果展示
进阶分析
有的读者肯定会疑惑,这跟闭包在什么关系,这里做一个探索,假设在代码中不使用闭包,也就是下面这句代码
addmessage(marker,i);//闭包
直接把代码写在initialize函数中,代码如下
var map; function initialize() { var tw=new google.maps.LatLng(25.091075 , 121.55983449999997); var mapOptions = { zoom: 10, center: tw }; map = new google.maps.Map(document.getElementById('map-canvas'),mapOptions); //随机添加5个坐标点 for(var i=0;i<5;i++){ var position=new google.maps.LatLng( tw.lat()+0.1*Math.random(0,1), tw.lng()+0.1*Math.random(0,1) ); var marker=new google.maps.Marker({ position:position, map:map }); marker.setTitle(i.toString()); //addmessage(marker,i);//闭包 var message = ['事', '件', '的', '监', '听']; var infowindow = new google.maps.InfoWindow({ content: message[i] });google.maps.event.addListener(marker, 'click', function() { infowindow.open(marker.get('map'), marker); });
}
}
效果如图
我们可以发现,所有的marker都绑定了“听”,显然这不是我们想要的结果。之所以会产生这种结果,是因为在绑定click消息时,所有的marker都被绑定了。所以要实现每个marker都绑定不同的消息,这里就需要用闭包。
关于闭包
如果你对闭包一知半解,推荐下面两篇文章:
相关阅读
声明
1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。
2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。
手机阅读
公众号关注
知识星球
手机阅读
最新GIS干货
私享圈子