javascript - 单个标记上的 setPosition 触发所有标记的 setContent

标签 javascript google-maps google-maps-markers

在我正在开发的一个应用程序中,根据车辆的最后已知速度,我每 100 毫秒插值一次车辆的下一个位置,并将其绘制在 map 上。这会导致移动设备出现性能问题。

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

在运行性能分析器时,我注意到 MarkerWithLabels 中的 setContent 执行了很多次并导致大量布局重绘。

Performance Tab


Source Tab

放置一个 console.log 显示它正在为我们拥有的所有标记调用,即使我们只是改变其中一个的位置。

我在这里的 Codepen 中重现了这个问题 - https://codepen.io/anon/pen/XZwGGr?editors=0011

一小段相关代码,

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 与内容一起打印。您会注意到,我们添加的所有标记都会发生这种情况,而不仅仅是正在更新的标记。

这很常见吗?这是它应有的行为方式吗?

最佳答案

问题在于draw函数调用了setContent,看起来draw一直在调用。

不太确定是否应该是这种情况,但是一个小的更新(将最后使用的内容存储在标记中并且仅在它发生变化时更新它)似乎解决了这个问题(< em>没有任何直接问题)

参见 https://codepen.io/anon/pen/jZogKN

关于javascript - 单个标记上的 setPosition 触发所有标记的 setContent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49115083/

相关文章:

javascript - 谷歌地图 API V3 : getBounds() convert result for fitBounds()

javascript - 在谷歌地图 v3 中绘制可拖动形状

java - 标记类的子类

java - 在数组中搜索标记并找到它们

javascript - 'n' 天后删除 Google map 上的标记,以消除实时数据的拥塞

javascript - 我怎样才能得到 Rails.env.production 的等价物?在 application.js 中

javascript - 在 Asp.net 中使用 ajax 调用显示 google map

javascript - Firebase .limitToFirst() 不起作用

javascript - 用其他 Array 元素填充每个 null 元素

javascript - 与 Javascript 中的密码生成器苦苦挣扎。无法正确更改页面上的文本