diff --git a/map4.js b/map4.js index f27be9a..b338b9f 100644 --- a/map4.js +++ b/map4.js @@ -103,28 +103,28 @@ Object.values(latestByDevice).forEach((row) => { const li = document.createElement("li"); - // ★ オンライン判定 30秒 const updated = new Date(row.updated_at); const diff = (Date.now() - updated) / 1000; li.classList.add(diff < 30 ? "online" : "offline"); - // アイコン const icon = document.createElement("div"); icon.className = "member-icon"; li.appendChild(icon); li.append(row.user_name); - // クリックでピンへ li.addEventListener("click", () => { if (row.lat && row.lng) { map.setView([row.lat, row.lng], 16, { animate: true }); - const mk = otherMarkers.find((m) => m._myDeviceId === row.device_id); + + const mk = otherMarkers.find(m => m._myDeviceId === row.device_id); + if (mk && mk._icon) { - const el = mk._icon; - el.classList.remove("bounce-pin"); - void el.offsetWidth; - el.classList.add("bounce-pin"); + const wrapper = mk._icon.parentElement; // ←★★重要 + + wrapper.classList.remove("bounce-pin"); + void wrapper.offsetWidth; + wrapper.classList.add("bounce-pin"); } } }); @@ -148,7 +148,6 @@ if (!latestByDevice[row.device_id]) latestByDevice[row.device_id] = row; } - // 自分が抜け落ちる防止 if (!latestByDevice[deviceId]) { latestByDevice[deviceId] = { user_name: currentUser, @@ -161,7 +160,6 @@ showMemberList(latestByDevice); - // ピン更新 otherMarkers.forEach((m) => map.removeLayer(m)); otherMarkers = []; @@ -196,7 +194,6 @@ await saveMyLocation(lastLat, lastLng); await showOtherUsers(); - // ★ 自分の位置を 10秒ごとに更新 setInterval(async () => { try { const pos = await getPosition(); @@ -206,7 +203,6 @@ } catch {} }, 10000); - // ★ 他ユーザー読み込み setInterval(showOtherUsers, 2000); const exit = document.getElementById("exitBtn");