用js闭包的方法实现多点标注冒泡示例


Posted in Javascript onMay 29, 2014

这两天在做地图这块,一点点js代码,各种坑。第一次接触js,各种难,下面就这几天的研究做一些总结,求坑
在事件监听器中使用闭包

在执行事件监听器时,通常可取的做法是将私有数据和持久性数据附加到对象中。JavaScript 不支持“私有”实例数据,但是支持允许内部函数访问外部变量的闭包。在事件监听器中,闭包非常适用于访问通常不附加到发生事件的对象的变量。

以下示例在事件监听器中使用了函数闭包将加密讯息分配给一组标记。点击每个标记将会看到加密讯息的一部分,该讯息并不包含在标记本身内。

var map; 
function initialize() { 
var myLatlng = new google.maps.LatLng(-25.363882,131.044922); 
var mapOptions = { 
zoom: 4, 
center: myLatlng, 
mapTypeId: google.maps.MapTypeId.ROADMAP 
} map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions); 
// Add 5 markers to the map at random locations. 
var southWest = new google.maps.LatLng(-31.203405,125.244141); 
var northEast = new google.maps.LatLng(-25.363882,131.044922); 
var bounds = new google.maps.LatLngBounds(southWest,northEast); 
map.fitBounds(bounds); 
var lngSpan = northEast.lng() - southWest.lng(); 
var latSpan = northEast.lat() - southWest.lat(); 
for (var i = 0; i < 5; i++) { 
var location = new google.maps.LatLng(southWest.lat() + latSpan * Math.random(), 
southWest.lng() + lngSpan * Math.random()); 
var marker = new google.maps.Marker({ 
position: location, 
map: map 
}); 
var j = i + 1; 
marker.setTitle(j.toString()); 
attachSecretMessage(marker, i); 
} 
} 
// The five markers show a secret message when clicked 
// but that message is not within the marker's instance data. 
function attachSecretMessage(marker, number) { 
var message = ["This","is","the","secret","message"]; 
var infowindow = new google.maps.InfoWindow( 
{ content: message[number], 
size: new google.maps.Size(50,50) 
}); 
google.maps.event.addListener(marker, 'click', function() { 
infowindow.open(map,marker); 
}); 
}

这段代码是从google官方里面复制下来的

接下来我要实现从数据库中读取经纬度、地址信息,在google map上进行标注并单击标注出现信息

要实现多点标注,以上代码可以参考

<script type="text/javascript" > 
var map; 
window.onload =function load() { var number='<%=number %>';//获取后台cs的pubilc的number的值 
var address = new Array() 
var weidu=new Array(); 
var jingdu=new Array(); 
var chepai = new Array(); 
<% for(int i=0;i<number;i++){ %> 
weidu.push('<%=lan[i]%>');//从后台cs获取经纬度的值 
jingdu.push('<%=lon[i]%>'); 
address.push('<%=addr[i]%>'); 
chepai.push('<%=carnum[i] %>'); 
// var wei ; 
// wei = chepai['<%=i%>']; 
// alert(wei); 
<% } %> 
var Latlng = new google.maps.LatLng(weidu[0], jingdu[0]); 
// var myLatlng = new google.maps.LatLng(25.273566, 110.290195); 
var myOptions = { 
zoom: 8, 
center: Latlng, 
mapTypeId: google.maps.MapTypeId.ROADMAP 
}; 
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);////初始化一个地图实例 
for(var j=0;j<number;j++) //这里卡了好久,原因是js的类型只有var;把js和cs弄混了一直用到《% %>,其实单纯的js不需要,跟C差不多就可以了 
{ 
var lat = weidu[j]; 
var lng = jingdu[j]; 
var addre = address[j]; 
var chepaihao = chepai[j]; 
// alert(j); 
// alert(lat); 
// var image = 'Image/webcam.png'; 
//设置标志点 
var myLatlng = new google.maps.LatLng(weidu[j ], jingdu[j ]); 
var h = chepaihao; 
var tit = h.toString(); 
var marker = new google.maps.Marker({ 
position: myLatlng, 
map: map, 
// icon: "http://google-maps-icons.googlecode.com/files/yellow08.png", 
// icon: image, //通过icon可以设定自己想显示的图标,不设置则显示Google map默认的图标 
title: tit //title表示鼠标放到marker上要显示的值。 
}); 
attachSecretMessage(marker, j,addre,lat,lng); 
} 
} 
function attachSecretMessage(marker, number,addre1,lat1,lng1) { 
// var message = ["This", "is", "the", "secret", "message"]; 
var infowindow = new google.maps.InfoWindow( 
{ content: "<span style='font-size:15px'><b>地址: </b>" + addre1 + "<br>"+ "经纬度:"+ lat1 + ","+ lng1 +"</span>", 
size: new google.maps.Size(50, 50) 
}); 
// infowindow.setContent("地址:"+ addre1 +"经度:" +lat1 + "纬度:"+lng1); 
//点击弹出信息窗口 
google.maps.event.addListener(marker, 'click', function () { 
infowindow.open(map, marker); 
}); 
} 
</script>

cs后端代码:
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; 
using System.Data.SqlClient; 
public partial class Default2 : System.Web.UI.Page 
{ 
public double[] la = new double[25]; 
public double[] ln = new double[25]; 
public int[] id = new int[25]; 
public string[] addr = new string[25]; 
public int number; 

protected void Page_Load(object sender, EventArgs e) 
{ 
string mycnnConnectionString1 = System.Configuration.ConfigurationManager.ConnectionStrings["testconect"].ConnectionString; //创建连接字符串 
SqlConnection mycnn1 = new SqlConnection(mycnnConnectionString1); 
mycnn1.Open(); 
SqlCommand cmd1 = new SqlCommand("select L_ID,L_Lantitude,L_Longitude,L_Address from LatestPosition ", mycnn1); 
SqlDataReader dr1 = cmd1.ExecuteReader(); 
int k2 = 0; 
int k3 = 0; 
int k4 = 0; 
int k1 = 0; 
// string buf1 = ""; 
double buf2 = 0; 
double buf3 = 0; 
int buf4 = 0; 
string buf1 = "0"; 
while (dr1.Read()) 
{ 
//lat 
buf2 = (double)dr1["L_Lantitude"]; 
la[k2] = buf2; 
k2++; 
//lng 
buf3 = (double)dr1["L_Longitude"];///数据库读取float型的数据要用double 
ln[k3] = buf3; 
k3++; 
//id 
buf4 = (int)dr1["L_ID"]; 
id[k4] = buf4; 
k4++; 
buf1 = dr1["L_Address"].ToString(); 
addr[k1] = buf1; 
k1++; 
} 
number = k4; 
dr1.Close(); 
mycnn1.Close(); 
} 

}
Javascript 相关文章推荐
jquery 实现checkbox全选,反选,全不选等功能代码(奇数)
Oct 24 Javascript
cookie的secure属性详解
Apr 08 Javascript
基于jquery实现简单的手风琴特效
Nov 24 Javascript
JavaScript中通过提示框跳转页面的方法
Feb 14 Javascript
AngularJS入门教程之Select(选择框)详解
Jul 27 Javascript
Jquery获取当前城市的天气信息
Aug 05 Javascript
vue proxyTable 接口跨域请求调试的示例
Sep 12 Javascript
JS中精巧的自动柯里化实现方法
Dec 12 Javascript
JavaScript数组、json对象、eval()函数用法实例分析
Feb 21 Javascript
vue实现路由懒加载及组件懒加载的方式
Jun 11 Javascript
QML实现圆环颜色选择器
Sep 25 Javascript
vue移动端下拉刷新和上滑加载
Oct 27 Javascript
关于JavaScript中name的意义冲突示例介绍
May 29 #Javascript
window.open()详解及浏览器兼容性问题示例探讨
May 29 #Javascript
javaScript年份下拉列表框内容为当前年份及前后50年
May 28 #Javascript
href下载文件根据id取url并下载
May 28 #Javascript
javascript自定义的addClass()方法
May 28 #Javascript
使用insertAfter()方法在现有元素后添加一个新元素
May 28 #Javascript
用html+css+js实现的一个简单的图片切换特效
May 28 #Javascript
You might like
利用PHP制作简单的内容采集器的代码
2007/11/28 PHP
解析php中die(),exit(),return的区别
2013/06/20 PHP
memcache命令启动参数中文解释
2014/01/13 PHP
phpQuery让php处理html代码像jQuery一样方便
2015/01/06 PHP
Symfony2实现在doctrine中内置数据的方法
2016/02/05 PHP
Zend Framework框架实现类似Google搜索分页效果
2016/11/25 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
2017/02/28 PHP
从零学JS之你需要了解的几本书
2014/05/19 Javascript
jQuery检测鼠标左键和右键点击的方法
2015/03/17 Javascript
jquery实现的代替传统checkbox样式插件
2015/06/19 Javascript
微信小程序 开发之全局配置
2017/05/05 Javascript
vue 2.0封装model组件的方法
2017/08/03 Javascript
Angular实现的内置过滤器orderBy排序与模糊查询功能示例
2017/12/29 Javascript
jQuery实现点击自身以外区域关闭弹出层功能完整示例【改进版】
2018/07/31 jQuery
vue地址栏直接输入路由无效问题的解决
2018/11/15 Javascript
vue实现全屏滚动效果(非fullpage.js)
2020/03/07 Javascript
JavaScript实现捕获鼠标坐标
2020/04/12 Javascript
分享一款超好用的JavaScript 打包压缩工具
2020/04/26 Javascript
Chrome插件开发系列一:弹窗终结者开发实战
2020/10/02 Javascript
Phantomjs抓取渲染JS后的网页(Python代码)
2016/05/13 Python
Python使用pymysql从MySQL数据库中读出数据的方法
2018/07/25 Python
Python实现TCP探测目标服务路由轨迹的原理与方法详解
2019/09/04 Python
python 循环数据赋值实例
2019/12/02 Python
浅谈python的elementtree模块处理中文注意事项
2020/03/06 Python
python 实现全球IP归属地查询工具
2020/12/18 Python
HTML4和HTML5之间除了相似以外的10个主要不同
2012/12/13 HTML / CSS
中东奢侈品购物网站:Ounass
2020/09/02 全球购物
大学生入党思想汇报
2014/01/14 职场文书
优秀毕业生的求职信
2014/07/21 职场文书
保密工作承诺书
2014/08/29 职场文书
父亲节活动总结
2015/02/12 职场文书
总经理聘用协议书
2015/09/21 职场文书
2016年小学生清明节广播稿
2015/12/17 职场文书
浅谈MySQL函数
2021/10/05 MySQL
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/07 其他游戏
MySQL创建管理KEY分区
2022/04/13 MySQL