openlayers | ol.Overlay实现点击地图图标,图标跳动

要在地图上显示并附加到单个地图位置的元素。就像module:ol/control/Control~Control,叠加层是可见的小部件。

与控件不同,它们不在屏幕上的固定位置,而是与地理坐标相关联,因此平移地图将移动覆盖而不是控件。

例子:

import Overlay from 'ol/Overlay';

var popup = new Overlay({
  element: document.getElementById('popup')
});
popup.setPosition(coordinate);
map.addOverlay(popup);

ol.Overlay


<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<link rel="stylesheet" href="https://openlayers.org/en/v5.3.0/css/ol.css" />
		<script type="text/javascript" src="https://openlayers.org/en/v5.3.0/build/ol.js"></script>
		<title>openlayers 标记点闪烁</title>
	</head>
	<body>
		<div id="map"></div>
		<div id="baidu"><img src="https://www.baidu.com/img/flexible/logo/pc/result@2.png"></div>
		<script>
			var beijing = ol.proj.fromLonLat([116.28, 39.54]);
			var map = new ol.Map({
				target: 'map',
				layers: [
					new ol.layer.Tile({
						source: new ol.source.OSM()
					})
				],
				view: new ol.View({
					center: beijing,
					zoom: 4
				})
			});

			var tip = document.getElementById('baidu');

			var overlay = new ol.Overlay({
				element: tip,
				positioning: 'center-center'
			});
			overlay.setPosition(beijing);
			map.addOverlay(overlay)
			let flag = true
			let animate = null

			tip.onclick = () => {
				if (animate != null) {
					clearInterval(animate);
					animate = null;
				} else {
					animate = setInterval(() => {
						flag = !flag
						let po = flag ? '10px' : '-10px'
						tip.style.top = po
					}, 500);

				}


			}
		</script>
	</body>
	<style>
		#baidu {
			width: 100px;
			position: absolute;
			top: 10px;
		}

		img {
			width: 100%;
		}
	</style>
</html>
posted @ 2022-03-19 15:50  槑孒  阅读(502)  评论(0编辑  收藏  举报