diff options
Diffstat (limited to 'public/app.js')
| -rw-r--r-- | public/app.js | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/public/app.js b/public/app.js index 978cdf7..35d9898 100644 --- a/public/app.js +++ b/public/app.js @@ -194,6 +194,7 @@ function setCurrent(id, rect) { if (!userZoomed) scale = worldScale() center() getExits(id) + refreshAllNav() } function renderNav(id) { @@ -202,6 +203,7 @@ function renderNav(id) { t.el.querySelectorAll(".nav").forEach((n) => n.remove()) const exits = exitsCache.get(id) if (!exits) return + const isCurrent = cur && cur.id === id const nav = document.createElement("div") nav.className = "nav" for (const ex of exits) { @@ -210,15 +212,16 @@ function renderNav(id) { zone.addEventListener("pointermove", () => { if (adjacentTile(id, ex.dir)) return zone.classList.add("preview") + cancelHideGhost() showGhost(choosePlacement(id, ex.dir)) }) zone.addEventListener("pointerleave", () => { zone.classList.remove("preview") - hideGhost() + scheduleHideGhost() }) zone.addEventListener("pointerdown", (e) => e.stopPropagation()) zone.addEventListener("click", (e) => { e.stopPropagation(); traverseFrom(id, ex.dir) }) - if (!adjacentTile(id, ex.dir)) { + if (!adjacentTile(id, ex.dir) && isCurrent) { const chev = document.createElement("div") chev.className = "nav-chev" chev.innerHTML = ARROW_SVG[ex.dir] @@ -366,6 +369,15 @@ function hideGhost() { ghostKey = "" } +let hideGhostTimer = 0 +function scheduleHideGhost() { + clearTimeout(hideGhostTimer) + hideGhostTimer = setTimeout(hideGhost, 80) +} +function cancelHideGhost() { + clearTimeout(hideGhostTimer) +} + const zones = new Map() function clearTileZones(id) { const zs = zones.get(id) @@ -393,8 +405,8 @@ function renderTileZones(id) { z.style.top = p.rect.y + "px" z.style.width = p.rect.w + "px" z.style.height = p.rect.h + "px" - z.addEventListener("pointermove", () => showGhost(p)) - z.addEventListener("pointerleave", () => hideGhost()) + z.addEventListener("pointermove", () => { cancelHideGhost(); showGhost(p) }) + z.addEventListener("pointerleave", () => scheduleHideGhost()) z.addEventListener("pointerdown", (e) => e.stopPropagation()) z.addEventListener("click", () => traverseFrom(id, dir)) world.appendChild(z) |
