Add tooltip
This commit is contained in:
parent
89f731a31d
commit
d124702f87
@ -35,5 +35,6 @@
|
|||||||
<p id="coords"></p>
|
<p id="coords"></p>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
<div id="tooltip"></div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
24
frontend/src/Tooltip.ts
Normal file
24
frontend/src/Tooltip.ts
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
const OFFSET = 12;
|
||||||
|
|
||||||
|
export class Tooltip {
|
||||||
|
private timeout: number | null = null;
|
||||||
|
|
||||||
|
constructor(private element: HTMLElement) {
|
||||||
|
document.body.addEventListener("mousemove", (event: MouseEvent) => {
|
||||||
|
this.element.style.opacity = "1";
|
||||||
|
this.element.style.left = event.x + OFFSET + "px";
|
||||||
|
this.element.style.top = event.y + OFFSET + "px";
|
||||||
|
|
||||||
|
if (this.timeout) clearTimeout(this.timeout);
|
||||||
|
this.timeout = setTimeout(() => {
|
||||||
|
this.element.style.opacity = "0.8";
|
||||||
|
}, 1000);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
setText(text: string) {
|
||||||
|
this.element.style.display = text ? "block" : "none";
|
||||||
|
this.element.innerHTML = text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -2,6 +2,9 @@ import { Throttler } from "./Throttler";
|
|||||||
import { setTopbarOffset, addToggleDropdownListener } from "./topbar";
|
import { setTopbarOffset, addToggleDropdownListener } from "./topbar";
|
||||||
import { Coordinate, Position, convertPixelsToCoordinate, convertCoordinateToPixels } from "./coordinates";
|
import { Coordinate, Position, convertPixelsToCoordinate, convertCoordinateToPixels } from "./coordinates";
|
||||||
import { Size } from "./size";
|
import { Size } from "./size";
|
||||||
|
import { Tooltip } from "./Tooltip";
|
||||||
|
|
||||||
|
const tooltip = new Tooltip(document.getElementById("tooltip")!);
|
||||||
|
|
||||||
type ZipCodeReverseResponse = {
|
type ZipCodeReverseResponse = {
|
||||||
nr: number | null;
|
nr: number | null;
|
||||||
@ -48,11 +51,11 @@ function displayZipCode(
|
|||||||
? `Postnummer ikke fundet`
|
? `Postnummer ikke fundet`
|
||||||
: `Postnummer: <code>${zipCode}</code>, ${name}`;
|
: `Postnummer: <code>${zipCode}</code>, ${name}`;
|
||||||
|
|
||||||
if (center == null) return;
|
tooltip.setText(zipCode ? `<code>${zipCode}</code> ${name}` : "");
|
||||||
|
|
||||||
const dot = document.getElementById("dot")!;
|
const dot = document.getElementById("dot")!;
|
||||||
|
|
||||||
if (!zipCode) {
|
if (!center) {
|
||||||
dot.style.display = "none";
|
dot.style.display = "none";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -76,7 +79,7 @@ function setupMap(
|
|||||||
zipCodeElement: HTMLParagraphElement,
|
zipCodeElement: HTMLParagraphElement,
|
||||||
) {
|
) {
|
||||||
const mapImg = document.querySelector<HTMLImageElement>("#map")!;
|
const mapImg = document.querySelector<HTMLImageElement>("#map")!;
|
||||||
const fetcher = new Throttler(500);
|
const fetcher = new Throttler(200);
|
||||||
|
|
||||||
mapImg.onmousemove = async (event: MouseEvent) => {
|
mapImg.onmousemove = async (event: MouseEvent) => {
|
||||||
const mousePosition: Position = { x: event.offsetX, y: event.offsetY };
|
const mousePosition: Position = { x: event.offsetX, y: event.offsetY };
|
||||||
|
@ -180,6 +180,25 @@ code {
|
|||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
border: 2px solid black;
|
border: 2px solid black;
|
||||||
background-color: var(--brand);
|
background-color: var(--brand);
|
||||||
|
filter: drop-shadow(1px 1px 2px black);
|
||||||
position: absolute;
|
position: absolute;
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#tooltip {
|
||||||
|
display: none;
|
||||||
|
position: absolute;
|
||||||
|
background-color: white;
|
||||||
|
color: black;
|
||||||
|
padding: 5px;
|
||||||
|
border: 1px solid black;
|
||||||
|
box-shadow: 2px 2px 2px black;
|
||||||
|
transition: opacity 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 1000px) {
|
||||||
|
main {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user