在 Bing 个地图中触发点击事件
Trigger Click Event in Bing Maps
我在 Bing 地图上的点击事件遇到了一些麻烦。
我有一系列商店,我可以毫无问题地放置所有图钉和点击事件(打开信息框)
var STORES = [
{
id: 123,
lat: 1.23456789,
lng: -1.23456789,
name: 'AEVA'
},
...
]
for (var i = 0; i < STORES.length; i++) {
var pinOptions: {icon: 'map-pin.png?id'+STORES[i].id, width: 29, height: 52},
LatLng = new Microsoft.Maps.Location(STORES[i].lat, STORES[i].lng),
pin = new Microsoft.Maps.Pushpin(LatLng, pinOptions);
pin.content = '<p>'+STORES[i].name+'</p>';
Microsoft.Maps.Events.addHandler(pin, 'click', displayInfobox);
bing.pinLayer.push(pin);
}
现在的问题是,当用户通过搜索页面到达该页面时,基本上会添加一个带有 id 的主题标签,例如 /stores#id123
我希望地图自动打开具有该 ID 的框,所以我添加了这段代码
var hash = window.location.hash;
hash = hash.replace("#", "");
if(hash.length>0){
var pin = $('img[src*="?'+hash+'"]').parent();
pin.trigger('click');
}
但这行不通。我也试过
Microsoft.Maps.Events.invoke(a, 'click');
但是没有任何反应,有没有人有解决办法,触发事件点击?
谢谢
Microsoft.Maps.Events.invoke
函数需要 实体对象 而不是 Html 元素。实体可以是以下任何一种类型:Infobox, Polygon, Polyline, Pushpin, TileLayer, or EntityCollection。
话虽如此,您可以考虑使用以下方法来查找 Pushpin:
function findPin(map,storeId)
{
for(var i = 0; i < map.entities.getLength();i++){
var entity = map.entities.get(i);
if(entity.getIcon === undefined) continue;
var icon = entity.getIcon();
if(entity.getIcon() === "map-pin.png?id" + storeId) return entity;
}
return null;
}
用法
var storeId = window.location.hash.replace("#id", "");
if(storeId.length > 0){
var selectedPin = findPin(bing,storeId);
Microsoft.Maps.Events.invoke(selectedPin, 'click');
}
哪里
function displayInfobox(e) {
infobox.setLocation(this.target.getLocation());
infobox.setOptions({ visible: true });
}
我在 Bing 地图上的点击事件遇到了一些麻烦。 我有一系列商店,我可以毫无问题地放置所有图钉和点击事件(打开信息框)
var STORES = [
{
id: 123,
lat: 1.23456789,
lng: -1.23456789,
name: 'AEVA'
},
...
]
for (var i = 0; i < STORES.length; i++) {
var pinOptions: {icon: 'map-pin.png?id'+STORES[i].id, width: 29, height: 52},
LatLng = new Microsoft.Maps.Location(STORES[i].lat, STORES[i].lng),
pin = new Microsoft.Maps.Pushpin(LatLng, pinOptions);
pin.content = '<p>'+STORES[i].name+'</p>';
Microsoft.Maps.Events.addHandler(pin, 'click', displayInfobox);
bing.pinLayer.push(pin);
}
现在的问题是,当用户通过搜索页面到达该页面时,基本上会添加一个带有 id 的主题标签,例如 /stores#id123
我希望地图自动打开具有该 ID 的框,所以我添加了这段代码
var hash = window.location.hash;
hash = hash.replace("#", "");
if(hash.length>0){
var pin = $('img[src*="?'+hash+'"]').parent();
pin.trigger('click');
}
但这行不通。我也试过
Microsoft.Maps.Events.invoke(a, 'click');
但是没有任何反应,有没有人有解决办法,触发事件点击?
谢谢
Microsoft.Maps.Events.invoke
函数需要 实体对象 而不是 Html 元素。实体可以是以下任何一种类型:Infobox, Polygon, Polyline, Pushpin, TileLayer, or EntityCollection。
话虽如此,您可以考虑使用以下方法来查找 Pushpin:
function findPin(map,storeId)
{
for(var i = 0; i < map.entities.getLength();i++){
var entity = map.entities.get(i);
if(entity.getIcon === undefined) continue;
var icon = entity.getIcon();
if(entity.getIcon() === "map-pin.png?id" + storeId) return entity;
}
return null;
}
用法
var storeId = window.location.hash.replace("#id", "");
if(storeId.length > 0){
var selectedPin = findPin(bing,storeId);
Microsoft.Maps.Events.invoke(selectedPin, 'click');
}
哪里
function displayInfobox(e) {
infobox.setLocation(this.target.getLocation());
infobox.setOptions({ visible: true });
}