Example of displaying feature information in tooltip by hovering.
In this example, a listener is registered on the map's pointermove
to display the feature information in a tooltip when the pointer hovers over a feature.
import GeoJSON from 'ol/format/GeoJSON.js';
import Map from 'ol/Map.js';
import VectorLayer from 'ol/layer/Vector.js';
import VectorSource from 'ol/source/Vector.js';
import View from 'ol/View.js';
const vector = new VectorLayer({
source: new VectorSource({
url: 'https://openlayers.org/data/vector/ecoregions.json',
format: new GeoJSON(),
}),
background: 'white',
style: {
'fill-color': ['string', ['get', 'COLOR'], '#eeeeee'],
},
});
const map = new Map({
layers: [vector],
target: 'map',
view: new View({
center: [0, 0],
zoom: 2,
}),
});
const info = document.getElementById('info');
let currentFeature;
const displayFeatureInfo = function (pixel, target) {
const feature = target.closest('.ol-control')
? undefined
: map.forEachFeatureAtPixel(pixel, function (feature) {
return feature;
});
if (feature) {
info.style.left = pixel[0] + 'px';
info.style.top = pixel[1] + 'px';
if (feature !== currentFeature) {
info.style.visibility = 'visible';
info.innerText = feature.get('ECO_NAME');
}
} else {
info.style.visibility = 'hidden';
}
currentFeature = feature;
};
map.on('pointermove', function (evt) {
if (evt.dragging) {
info.style.visibility = 'hidden';
currentFeature = undefined;
return;
}
const pixel = map.getEventPixel(evt.originalEvent);
displayFeatureInfo(pixel, evt.originalEvent.target);
});
map.on('click', function (evt) {
displayFeatureInfo(evt.pixel, evt.originalEvent.target);
});
map.getTargetElement().addEventListener('pointerleave', function () {
currentFeature = undefined;
info.style.visibility = 'hidden';
});
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Tooltip on Hover</title>
<link rel="stylesheet" href="node_modules/ol/ol.css">
<style>
.map {
width: 100%;
height: 400px;
}
#map {
position: relative;
}
#info {
position: absolute;
display: inline-block;
height: auto;
width: auto;
z-index: 100;
background-color: #333;
color: #fff;
text-align: center;
border-radius: 4px;
padding: 5px;
left: 50%;
transform: translateX(3%);
visibility: hidden;
pointer-events: none;
}
</style>
</head>
<body>
<div id="map" class="map">
<div id="info"></div>
</div>
<script type="module" src="main.js"></script>
</body>
</html>
{
"name": "tooltip-on-hover",
"dependencies": {
"ol": "10.2.1"
},
"devDependencies": {
"vite": "^3.2.3"
},
"scripts": {
"start": "vite",
"build": "vite build"
}
}