JSFiddle - React, Tailwind, and code Playground
HTML
<script src="http://openlayers.org/api/OpenLayers.js"></script>
<div id="map"></div>
CSS
#map {
border: 6px solid #7AC49F;
border-radius: 30px 30px 30px 30px;
bottom: 0;
display: block;
height: auto;
left: 0;
margin: 39px 10px 10px;
position: absolute;
right: 0;
top: 0;
background-color:#eee;
}
div.olMapViewport {
border-radius: 25px;
display: block;
}
.olLayerDiv {
border-radius: 25px;
display: block;
}
}
JavaScript
var map = new OpenLayers.Map('map', {
theme: null,
controls: [new OpenLayers.Control.Navigation()]
});
layer = new OpenLayers.Layer.WMS("OpenLayers WMS",
"http://vmap0.tiles.osgeo.org/wms/vmap0", {
layers: 'basic'
});
map.addLayer(layer);
map.setCenter([3, 49], 5);
var startPt = new OpenLayers.Geometry.Point(2, 45);
var endPt = new OpenLayers.Geometry.Point(7, 55);
//style
var style = {
strokeColor: "#0500bd",
strokeWidth: 15,
strokeOpacity: 0.5,
strokeColor: '#0000ff'
};
drawAnimatedLine(new OpenLayers.Geometry.Point(2, 45), new OpenLayers.Geometry.Point(7, 55), style, 50, 2000, function () {
drawAnimatedLine(new OpenLayers.Geometry.Point(7, 55), new OpenLayers.Geometry.Point(13, 52), style, 50, 2000);
});
function drawAnimatedLine(startPt, endPt, style, steps, time, fn) {
var directionX = (endPt.x - startPt.x) / steps;
var directionY = (endPt.y - startPt.y) / steps;
var i = 0;
var prevLayer;
var ivlDraw = setInterval(function () {
if (i > steps) {
clearInterval(ivlDraw);
if (fn) fn();
return;
}
var newEndPt = new OpenLayers.Geometry.Point(startPt.x + i * directionX, startPt.y + i * directionY);
var line = new OpenLayers.Geometry.LineString([startPt, newEndPt]);
var fea = new OpenLayers.Feature.Vector(line, {}, style);
var vec = new OpenLayers.Layer.Vector();
vec.addFeatures([fea]);
map.addLayer(vec);
if(prevLayer) map.removeLayer(prevLayer);
prevLayer = vec;
i++;
}, time / steps);
}