我在想是否有可能为我设置的 Google 地图热力图添加动画效果。虽然很容易设置 Google 地图并将热力图添加到其中,但看起来相当无聊。我想要为热力图添加某种脉冲效果。
我在想是否有可能为我设置的 Google 地图热力图添加动画效果。虽然很容易设置 Google 地图并将热力图添加到其中,但看起来相当无聊。我想要为热力图添加某种脉冲效果。
对于热力图的动画效果,很容易实现。下面的例子设置了一个自定义的梯度颜色数组,并调整其大小。结果产生一种脉冲效果。您可以在modulateGradient
函数中调整颜色,甚至可以改变热力图的透明度。但请注意,根据数据集的大小,动画可能会对性能产生相当大的影响。
<div id="map-canvas"></div>
var map, pointarray, heatmap;
var gradient, gradientStep = -1;
var taxiData = [
new google.maps.LatLng(37.782551, -122.445368),
new google.maps.LatLng(37.782745, -122.444586),
new google.maps.LatLng(37.782842, -122.443688),
new google.maps.LatLng(37.782919, -122.442815),
new google.maps.LatLng(37.782992, -122.442112),
new google.maps.LatLng(37.783100, -122.441461),
new google.maps.LatLng(37.783206, -122.440829),
new google.maps.LatLng(37.783273, -122.440324),
new google.maps.LatLng(37.783316, -122.440023),
new google.maps.LatLng(37.783357, -122.439794),
new google.maps.LatLng(37.783371, -122.439687)
];
function initialize() {
var mapOptions = {
zoom: 13,
center: new google.maps.LatLng(37.774546, -122.433523),
mapTypeId: google.maps.MapTypeId.SATELLITE
};
map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
var pointArray = new google.maps.MVCArray(taxiData);
heatmap = new google.maps.visualization.HeatmapLayer({
data: pointArray
});
heatmap.setMap(map);
setGradient();
google.maps.event.addListenerOnce(map, 'tilesloaded', modulateGradient);
}
function setGradient() {
gradient = [
'rgba(0, 255, 255, 0)',
'rgba(0, 255, 255, 1)',
'rgba(0, 191, 255, 1)',
'rgba(0, 127, 255, 1)',
'rgba(0, 63, 255, 1)',
'rgba(0, 0, 255, 1)',
'rgba(0, 0, 223, 1)',
'rgba(0, 0, 191, 1)',
'rgba(0, 0, 159, 1)',
'rgba(0, 0, 127, 1)',
'rgba(63, 0, 91, 1)',
'rgba(127, 0, 63, 1)',
'rgba(191, 0, 31, 1)',
'rgba(255, 0, 0, 1)'
];
heatmap.set('gradient', gradient);
}
function modulateGradient() {
var modulator = function() {
var newGradient = gradient.slice(0, heatmap.get('gradient').length + gradientStep);
if (newGradient.length == gradient.length || newGradient.length == 7) {
gradientStep *= -1;
}
heatmap.set('gradient', newGradient);
setTimeout(modulator, 100);
};
setTimeout(modulator, 100);
}
google.maps.event.addDomListener(window, 'load', initialize);
您可以在JSFiddle上找到代码的实时版本。
通过更改热力图层的半径大小,可以创建一种脉动效果。
首先让我们创建一个var smallRadius
和var bigRadius
并设置值;例如:smallRadius = 40;
bigRadius = 80;
然后将半径大小添加到您的var mapOptions
中,并将其设置为smallRadius
。
接下来创建一个animateRadius()
函数,如果半径被设置为smallRadius
,则将半径值从smallRadius
更改为bigRadius
,否则将半径设置为smallRadius
。
然后通过在setInterval()
中包含该函数来每秒运行一次该函数。
所以基本上就是这样:
var smallRadius = 40;
var bigRadius = 80;
var mapOptions = {
zoom: 13,
center: new google.maps.LatLng(37.774546, -122.433523),
mapTypeId: google.maps.MapTypeId.SATELLITE,
radius: smallRadius
};
//animate radius function
setInterval(function animateRadius()
{
if (heatMap.get('radius') === smallRadius)
{
heatMap.set('radius', bigRadius);
}
else
{
heatMap.set('radius', smallRadius);
}
}, 1000); // changes radius every 1 second
显然,您可以将 smallRadius
和 bigRadius
更改为任何您想要的值。