Javascript 创建事件侦听器以动态创建google地图标记
我正在尝试创建一个页面,我将用vba与excel集成。我想在单击标记时将事件侦听器添加到标记。我几乎无法为单个标记创建“单击侦听器”,但我无法对使用循环动态创建的多个标记执行此操作 单击标记时,我希望街景更新到新单击标记的位置 我非常感谢你的建议。 多谢各位 这就是我所拥有的(从这里到那里)Javascript 创建事件侦听器以动态创建google地图标记,javascript,google-maps,google-maps-api-3,google-street-view,Javascript,Google Maps,Google Maps Api 3,Google Street View,我正在尝试创建一个页面,我将用vba与excel集成。我想在单击标记时将事件侦听器添加到标记。我几乎无法为单个标记创建“单击侦听器”,但我无法对使用循环动态创建的多个标记执行此操作 单击标记时,我希望街景更新到新单击标记的位置 我非常感谢你的建议。 多谢各位 这就是我所拥有的(从这里到那里) 简单标记 html,正文,#地图画布{ 身高:100%; 保证金:0; 填充:0; } var标签='abcdefghijklmnopqrstuvxyz'//我 var labelIndex=0//我 v
简单标记
html,正文,#地图画布{
身高:100%;
保证金:0;
填充:0;
}
var标签='abcdefghijklmnopqrstuvxyz'//我
var labelIndex=0//我
var映射;
var全景图;
//这将从服务器端创建
变量标记=[
{lat:39.976784,lng:-75.234347,名称:“标记1”},
{lat:39.977043,lng:-75.235087,名称:“标记2”},
{lat:39.976097,lng:-75.234508,名称:“marker 3”},
{拉丁语:39.977059,液化天然气:-75.233682,名称:“标记4”}
];
var mylatng=new google.maps.LatLng(标记[0].lat,标记[0].lng);
函数初始化(){
//var sv=new google.maps.StreetViewService();
panorama=新的google.maps.StreetViewPanorama(document.getElementById('pano');
变量映射选项={
缩放:16,
中心:myLatlng
}
map=new google.maps.map(document.getElementById('map-canvas'),mapOptions);
变量全景选项={
导航控制:对,
职位:myLatlng,
//pov:{
//标题:34,
//投球:10
//}
};
//将初始街景摄影机设置为地图的中心
新的google.maps.StreetViewPanorama(document.getElementById('pano'),
全景图(可选);
//这是将创建标记的循环
对于(标记中的索引)addMarker(标记[索引]);
函数addMarker(数据){
//创建标记
var marker=new google.maps.marker({
位置:新的google.maps.LatLng(data.lat,data.lng),
地图:地图,
标签:标签[labelIndex++%labels.length],
标题:data.name
});
}
}
google.maps.event.addDomListener(窗口“加载”,初始化);
//将此代码包含到循环中
var infowindow = new google.maps.InfoWindow({
content: 'info content'
});
google.maps.event.addListener(marker, 'click', function() {
infowindow.open(map,marker);
});
在这里的函数中(函数(数据){…})(数据)因为您使用了标记数组
function addMarker(data) {
(function(data){ <<-- New line added
// Create the marker
var marker = new google.maps.Marker({
position: new google.maps.LatLng(data.lat, data.lng),
map: map,
label: labels[labelIndex++ % labels.length],
title: data.name
});
google.maps.event.addListener(marker, 'click', function(){// <<---- New line added
// Code event listener ....
});// <<---- New line added
})(data); // <<---- New line added
}
函数addMarker(数据){
(功能(数据){
保留对全景的引用:
应该是:
// Set the initial Street View camera to the center of the map
panorama = new google.maps.StreetViewPanorama(document.getElementById('pano'), panoramaOptions);
在标记中更改全景图的位置
,单击listener
代码片段:
var标签='ABCDEFGHIJKLMNOPQRSTUVWXYZ';//我
var labelIndex=0;//me
var映射;
var全景图;
//这将从服务器端创建
变量标记=[{
拉脱维亚:39.976784,
液化天然气:-75.234347,
名称:“标记1”
}, {
拉脱维亚:39.977043,
液化天然气:-75.235087,
名称:“标记2”
}, {
拉脱维亚:39.976097,
液化天然气:-75.234508,
名称:“标记3”
}, {
拉脱维亚:39.977059,
液化天然气:-75.233682,
名称:“标记4”
}];
var mylatng=new google.maps.LatLng(标记[0].lat,标记[0].lng);
函数初始化(){
//var sv=new google.maps.StreetViewService();
panorama=新的google.maps.StreetViewPanorama(document.getElementById('pano');
变量映射选项={
缩放:16,
中心:myLatlng
}
map=new google.maps.map(document.getElementById('map-canvas'),mapOptions);
变量全景选项={
导航控制:对,
职位:myLatlng,
//pov:{
//标题:34,
//投球:10
//}
};
//将初始街景摄影机设置为地图的中心
pano=new google.maps.StreetViewPanorama(document.getElementById('pano'),
全景图(可选);
//这是将创建标记的循环
对于(标记中的var索引)addMarker(标记[索引]);
函数addMarker(数据){
//创建标记
var marker=new google.maps.marker({
位置:新的google.maps.LatLng(data.lat,data.lng),
地图:地图,
标签:标签[labelIndex++%labels.length],
标题:data.name
});
google.maps.event.addListener(标记,'click',函数(e){
pano.setPosition(marker.getPosition());
});
}
}
google.maps.event.addDomListener(窗口“加载”,初始化);
html,
身体
#地图画布{
身高:100%;
保证金:0;
填充:0;
}
您希望街景指向哪个标题?您的标记单击侦听器在哪里?这与我的问题没有直接关系,但非常感谢您的快速响应。非常感谢。您的方法也很有效。但是geozipcode的更好、更干净。下面是我如何提取它的。google.maps.event.addListener(标记,'click',function(){var panoramaOptions={position:new google.maps.LatLng(data.lat,data.lng)}new google.maps.StreetViewPanorama(document.getElementById('pano'),panoramaOptions);
// Set the initial Street View camera to the center of the map
new google.maps.StreetViewPanorama(document.getElementById('pano'), panoramaOptions);
// Set the initial Street View camera to the center of the map
panorama = new google.maps.StreetViewPanorama(document.getElementById('pano'), panoramaOptions);
google.maps.event.addListener(marker,'click', function(e) {
pano.setPosition(marker.getPosition());
});