javascript - 为 google-maps-api-3 制作热图动画

标签 javascript google-maps google-maps-api-3 heatmap

这让我抓狂......

我正在使用谷歌地图 API v3 和热图。我已成功绘制数据点,没有任何问题。但是,我想要一个无限循环的动画。目前,我有以下代码。 ( map 出现,但没有任何数据点。)

var _data = [];
pointArray = new google.maps.MVCArray(_data);
var heatmap = new google.maps.visualization.HeatmapLayer({
    data: pointArray,
});

heatmap.setData(_data);
heatmap.setMap( map );

play = function(){
    for( var j = 0; j < data_arr.length; j++ ){
        pointArray.clear();

        for( var i = 0; i < data_arr[j].length; i++ ){
            pointArray.push( new google.maps.LatLng(data_arr[j][i]['lat'], data_arr[j][i]['lon']) );
        }

        setInterval(function(){
            play();
        }, 3000);
    }
}

google.maps.event.addListenerOnce(map, "idle", function(){
    play();
});

非常欢迎任何帮助!

最佳答案

问题在于,直到当前执行的脚本暂停后,热图数据才会更新。到那时,所有数据都已更改,因此无需设置动画。

不幸的是,这意味着简单化的方法行不通。您不必在直接循环中更改数据,而是必须将数据划分为动画步骤,仅更改几个数据点,然后使用 setTimeout 调用链中的下一步。这将暂停,以便库有机会实际进行您指定的更改。

此外,您对 setInterval 的使用不正确(我相信您在本例中指的是 setTimeout)。您在循环中调用 setInterval 并且从未清除它。循环的每次迭代都会导致一次新的定时执行,因此您很快就会有数百个时间间隔全部调用您的 play 函数。 setTimeout只会再执行一次。

关于javascript - 为 google-maps-api-3 制作热图动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13638411/

相关文章:

javascript - JS - 帮助 - 行分组

javascript - setTimeout 不等待指定的毫秒数

javascript - 使用 Jquery 选择现有的 Google map 元素

javascript - 当绘图管理器对标记处于事件状态时,自动单击 map 中心

javascript - Google Maps Javascript API 正在返回静态图像

javascript - 将 Stripe.js 作为 ES 模块导入 Vue

javascript - 框架在javascript中是什么意思?

javascript - 使用 GMaps 标记位置从 JavaScript 更新 PHP &lt;input&gt; 字段

ios - UITableView 静态第一个单元格与 Google SDK

javascript - 如何在谷歌地图上的折线中心设置折线标记?