这是我重新提出的问题。
我正在整理一个随机的点数组,以通过markerclusterer.js 对它们进行聚类。
for (var i = 0; i < 10; i++) {
Markers[i] = new google.maps.Marker({
position: new google.maps.LatLng(45.5 + (Math.random()/200), -73.60 -(Math.random()/20)),
map: map,
title: i.toString()
});
}
var mc = new MarkerClusterer(map,Markers,mcOptions);
这运作良好,现在这是问题所在。
我想让那个集群给我一个信息窗口或任何其他更好的选择。所以我将markerclusterer.js 'click' 事件中的dom 监听器更改为'dblclick' 事件。因此,我的集群将使用 dblclick 进行缩放,而不是单击一次,因为我希望单击事件通过简单列表中的集群标记触发我的信息窗口。(如果我可以触发信息窗口并收集集群标记信息,我可以设法显示一个列表。)
我在 markerclusterer.js 中创建了一个新的 dom 监听器:
google.maps.event.addDomListener(this.div_, "click", function (e) {
cMouseDownInCluster = false;
if (!cDraggingMapByCluster) {
var theBounds;
var mz;
var mc = cClusterIcon.cluster_.getMarkerClusterer();
/**
* This event is fired when a cluster marker is clicked.
* @name MarkerClusterer#click
* @param {Cluster} c The cluster that was clicked.
* @event
*/
google.maps.event.trigger(mc, "click", cClusterIcon.cluster_);
google.maps.event.trigger(mc, "clusterclick", cClusterIcon.cluster_); // deprecated name
// Prevent event propagation to the map:
e.cancelBubble = true;
if (e.stopPropagation) {
e.stopPropagation();
}
}
});
这只是没有“缩放”行为的原始副本。
编辑:: 测试
我已经用 console.log(mc.getMarkers()); 进行了测试 看看标记是否被识别并返回给我[Bi,Bi,Bi,Bi,Bi,Bi,Bi,Bi,Bi,Bi]。所以现在我的问题是我不知道该怎么处理那个 Bi 的东西。
Bi 是一个包含我需要的所有信息的构造函数。所以我可以用它做我想做的事。
现在我需要检查是否缩放到下一个集群并单击它...它再次给了我 10 Bi。我需要知道如何只将其中的 X 个管理到该新集群中。
更新:我现在可以打开信息窗口。它不是在好地方,但我可以打开它。
更新(晚上 7:00):我的信息窗口正在工作,但我可以无限打开它。
这是代码
google.maps.event.addDomListener(this.div_, "click", function (e) {
cMouseDownInCluster = false;
if (!cDraggingMapByCluster) {
var theBounds;
var mz;
var mc = cClusterIcon.cluster_.getMarkerClusterer();
var Mrk_cluster = mc.getMarkers();
/**
* This event is fired when a cluster marker is clicked.
* @name MarkerClusterer#click
* @param {Cluster} c The cluster that was clicked.
* @event
*/
google.maps.event.trigger(mc, "click", cClusterIcon.cluster_);
google.maps.event.trigger(mc, "clusterclick", cClusterIcon.cluster_); // deprecated name
//test infowindow
var contentString = '<div id="content">'+'<p>Test</p>' +'</div>';
var infowindow = new google.maps.InfoWindow({
content: contentString,
position: new google.maps.LatLng(Mrk_cluster[0].position.lat(),Mrk_cluster[0].position.lng())
});
infowindow.open(map);
console.log(mc.getMarkers());
// Prevent event propagation to the map:
e.cancelBubble = true;
if (e.stopPropagation) {
e.stopPropagation();
}
}
}); 所以我试图找到一个可以阻止这种行为的触发器。