In this article, we will share with you two methods on how to solve the for loop closure problem in JS. We hope it can help you.
A recent project also used the map function. It was an internal project of the company, so I studied the API of Baidu Maps. It feels like there are still many similarities with the API of Tiantu. The basic usage is pretty much the same. However, the response of Baidu Map is much faster than that of Tian Map. And now that I'm using Baidu Maps, some of the problems I had when using Tian Maps in the past have been explained more clearly.
#1. Prepare data. point information.
var points = [ {"lng":116,"lat":40,"url":"http://www.baidu.com","id":50,"name":"p1"}, {"lng":117,"lat":31,"url":"http://www.taobao.com","id":2,"name":"p2"}, {"lng":116,"lat":34,"url":"http://www.google.com","id":3,"name":"p3"} ]
2. Load the map. The center point and display level default to China.
var map = new BMap.Map("container"); map.centerAndZoom(new BMap.Point(103.388611,35.563611), 5);//设置中心点和显示级别。中国。 map.enableScrollWheelZoom();//滚轮放大缩小。
3. Display the marker point in a loop. Use the immediate execution function and closure loop to load the click event and display the information window to display more information about the label point.
function addMarker(points){ // 创建图标对象 // 创建标注对象并添加到地图 for(var i = 0,pointsLen = points.length;i <pointsLen;i++){ var point = new BMap.Point(points[i].lng,points[i].lat); var marker = new BMap.Marker(point); map.addOverlay(marker); //给标注点添加点击事件。使用立即执行函数和闭包 (function() { var thePoint = points[i]; marker.addEventListener("click",function(){ showInfo(this,thePoint); }); })(); } }
4. Click the information window that displays the markers.
//显示信息窗口,显示标注点的信息。 function showInfo(thisMaker,point){ var sContent = '<ul style="margin:0 0 5px 0;padding:0.2em 0">' +'<li style="line-height: 26px;font-size: 15px;">' +'<span style="width: 50px;display: inline-block;">id:</span>' + point.id + '</li>' +'<li style="line-height: 26px;font-size: 15px;">' +'<span style="width: 50px;display: inline-block;">名称:</span>' + point.name + '</li>' +'<li style="line-height: 26px;font-size: 15px;"><span style="width: 50px;display: inline-block;">查看:</span><a href="'+point.url+'">详情</a></li>' +'</ul>'; var infoWindow = new BMap.InfoWindow(sContent); // 创建信息窗口对象 thisMaker.openInfoWindow(infoWindow); //图片加载完毕重绘infowindow }
Rendering:
Here you just click to display the information window. In fact, hover the display window and slide the mouse over the display window.
Related recommendations:
How to solve the for loop closure problem in JS
JS loop li adds a click event (closed Package application)
The above is the detailed content of Use a closure loop to load click events. For more information, please follow other related articles on the PHP Chinese website!