使用一些图片资源实现动画效果
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8' />
<title></title>
<meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' />
<script src='https://api.tiles.mapbox.com/mapbox-gl-js/v0.29.0/mapbox-gl.js'></script>
<link href='https://api.tiles.mapbox.com/mapbox-gl-js/v0.29.0/mapbox-gl.css' rel='stylesheet' />
<style>
body { margin:0; padding:0; }
#map { position:absolute; top:0; bottom:0; width:100%; }
</style>
</head>
<body>
<div id='map'></div>
<script>
mapboxgl.accessToken = '<your access token here>';
var map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/dark-v9',
maxZoom: 5.99,
minZoom: 4,
zoom: 5,
center: [-75.789, 41.874]
});
map.on('load', function() {
var frameCount = 5;
for (var i = 0; i < frameCount; i++) {
map.addSource('radar' + i, {
type: 'image', /* iamge类型资源 */
url: 'https://www.mapbox.com/mapbox-gl-js/assets/radar' + i + '.gif', /* image的url */
coordinates: [
[-80.425, 46.437],
[-71.516, 46.437],
[-71.516, 37.936],
[-80.425, 37.936]
]
});
map.addLayer({
id: 'radar' + i,
source: 'radar' + i,
type: 'raster', /* 栅格类型layer,这里图片用的是raster layer */
paint: {
'raster-opacity': 0, /* 图片透明度 */
'raster-opacity-transition': {
duration: 0
}
}
});
}
var frame = frameCount - 1;
/* 通过周期设置不同图片的透明度实现动画效果 */
setInterval(function() { /* setInterval(callback,delay)实现动画效果,每隔delay毫秒调用一下callback */
map.setPaintProperty('radar' + frame, 'raster-opacity', 0); /* setPaintProperty(ID,name,value):设置id为ID的layer的属性name的属性值是value */
frame = (frame + 1) % frameCount;
map.setPaintProperty('radar' + frame, 'raster-opacity', 1);
}, 200);
});
</script>
</body>
</html>
原文:https://www.mapbox.com/mapbox-gl-js/example/animate-images/