Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 单个标记上的setPosition会触发所有标记的setContent_Javascript_Google Maps_Google Maps Markers - Fatal编程技术网

Javascript 单个标记上的setPosition会触发所有标记的setContent

Javascript 单个标记上的setPosition会触发所有标记的setContent,javascript,google-maps,google-maps-markers,Javascript,Google Maps,Google Maps Markers,在我正在研究的一个应用程序中,基于最后已知的车辆速度,我每100毫秒对车辆的下一个位置进行插值,并将其绘制在地图上。这导致了移动设备上的性能问题 我们还使用MarkerWithLabels在标记旁边放置一个标签 在运行performance profiler时,我注意到MarkerWithLabels中的setContent执行了很多次,并导致了大量布局重绘 放置一个console.log显示,尽管我们只改变了其中一个标记的位置,但我们所有的标记都会被调用 我在这里用密码笔复制了这个问题-

在我正在研究的一个应用程序中,基于最后已知的车辆速度,我每100毫秒对车辆的下一个位置进行插值,并将其绘制在地图上。这导致了移动设备上的性能问题

我们还使用MarkerWithLabels在标记旁边放置一个标签

在运行performance profiler时,我注意到MarkerWithLabels中的
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-添加了示例标记创建代码。我将查看此代码并查看。我的直觉是,这不应该引起任何问题。仍然不知道为什么会发生这种情况。谢谢你的回答,它帮助了。。。但我想确定一下,因为这是一个生产应用程序。我在这里也发布了一个查询-如果有正式的答案,那就太好了,谢谢你在这里发布链接,谢谢你提交合并请求。:)我抽不出时间来做这件事。我认为你在提出解决办法时做出贡献是恰当的。