Javascript 单个标记上的setPosition会触发所有标记的setContent
在我正在研究的一个应用程序中,基于最后已知的车辆速度,我每100毫秒对车辆的下一个位置进行插值,并将其绘制在地图上。这导致了移动设备上的性能问题 我们还使用MarkerWithLabels在标记旁边放置一个标签 在运行performance profiler时,我注意到MarkerWithLabels中的Javascript 单个标记上的setPosition会触发所有标记的setContent,javascript,google-maps,google-maps-markers,Javascript,Google Maps,Google Maps Markers,在我正在研究的一个应用程序中,基于最后已知的车辆速度,我每100毫秒对车辆的下一个位置进行插值,并将其绘制在地图上。这导致了移动设备上的性能问题 我们还使用MarkerWithLabels在标记旁边放置一个标签 在运行performance profiler时,我注意到MarkerWithLabels中的setContent执行了很多次,并导致了大量布局重绘 放置一个console.log显示,尽管我们只改变了其中一个标记的位置,但我们所有的标记都会被调用 我在这里用密码笔复制了这个问题-
setContent
执行了很多次,并导致了大量布局重绘
放置一个
console.log
显示,尽管我们只改变了其中一个标记的位置,但我们所有的标记都会被调用
我在这里用密码笔复制了这个问题-
一小段相关代码
var i = 0.002;
setInterval(function() {
dynamicMarker.setPosition(new google.maps.LatLng(-33.91627341958452 + i, 151.23648314155578 +i));
i = i + 0.001;
console.log('----------**----------');
}, 3000);
标记创建
var tempMarker = new MarkerWithLabel({
map: map,
animation: google.maps.Animation.DROP,
position: positions[i],
icon: markerIcon,
labelContent: i.toString(),
labelAnchor: new google.maps.Point(18, 12),
labelClass: "my-custom-class-for-label", // the CSS class for the label
labelInBackground: true
});
我每3秒钟更新一个标记的位置。我还修改了HTML部分中MarkerWithLabels的setContent
函数。如果打开控制台,您将看到setContent
与内容一起打印。您会注意到,我们添加的所有标记都会发生这种情况,而不仅仅是正在更新的标记
这是常见的吗?这就是它的行为方式吗?您需要创建一个标记数组,因为它的引用似乎是通过使用相同的var来保留的(这发生在我身上)
因此,您可以将标记推送到一个数组中,并通过自定义id或索引获取每个标记。问题在于
draw
函数调用setContent
,而draw
似乎是连续调用的
不确定是否应该如此,但一个小的更新(将上次使用的内容存储在标记中,并且仅在标记发生更改时更新)似乎可以解决问题(没有任何立即的问题)
请参见如何定义dynamicMarker?@Zelda7-添加了示例标记创建代码。我将查看此代码并查看。我的直觉是,这不应该引起任何问题。仍然不知道为什么会发生这种情况。谢谢你的回答,它帮助了。。。但我想确定一下,因为这是一个生产应用程序。我在这里也发布了一个查询-如果有正式的答案,那就太好了,谢谢你在这里发布链接,谢谢你提交合并请求。:)我抽不出时间来做这件事。我认为你在提出解决办法时做出贡献是恰当的。