From 2085fd9a31852db67ced1dbf6c5a42a589901b13 Mon Sep 17 00:00:00 2001 From: yarnom Date: Tue, 23 Sep 2025 17:06:53 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=9B=B7=E8=BE=BE=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- templates/radar_guangzhou.html | 43 ++++++++++++++++++++++++++++------ templates/radar_nanning.html | 36 ++++++++++++++++++++++++++-- 2 files changed, 70 insertions(+), 9 deletions(-) diff --git a/templates/radar_guangzhou.html b/templates/radar_guangzhou.html index ca0032c..b6be512 100644 --- a/templates/radar_guangzhou.html +++ b/templates/radar_guangzhou.html @@ -35,7 +35,7 @@
-
最新 7/40/104 瓦片信息
+
7/40/104 瓦片信息
时间:
索引:z= / y= / x=
@@ -46,7 +46,7 @@
-
最新雷达站气象(广州雷达站,金山楼顶坐标)
+
雷达站气象(广州雷达站,金山楼顶坐标)
站点:
位置:
@@ -83,6 +83,9 @@
+
+ +
@@ -148,7 +151,11 @@ gTimes = j.times || []; gTimes.forEach(dt=>{ const opt=document.createElement('option'); opt.value=dt; opt.textContent=dt; sel.appendChild(opt); }); if (gTimes.length>0 && gCurrentIdx<0){ sel.value=gTimes[0]; gCurrentIdx=0; } - updateCountAndButtons(); + updateCountAndButtons(); updateSlider(); + const shown = document.getElementById('dt').textContent; + if (gTimes.length>0 && gTimes[gCurrentIdx] && gTimes[gCurrentIdx] !== shown) { + await loadTileAt(gTimes[gCurrentIdx]); + } }catch{} } @@ -170,7 +177,7 @@ const selBox = document.getElementById('timeSelect'); for(let i=0;i0){ gCurrentIdx=0; await loadTileAt(gTimes[0]); } else { gCurrentIdx=-1; await loadLatestTile(); } } else { gCurrentIdx=gTimes.indexOf(v); await loadTileAt(v); } - updateCountAndButtons(); + updateCountAndButtons(); updateSlider(); }); document.getElementById('tsQuery').addEventListener('click', async ()=>{ const s=fromDTLocalInput(document.getElementById('tsStart').value); const e=fromDTLocalInput(document.getElementById('tsEnd').value); await populateTimes(s,e); }); function updateCountAndButtons(){ @@ -338,11 +345,33 @@ prev.disabled = !(N>0 && gCurrentIdx>=0 && gCurrentIdx0 && gCurrentIdx>0); } + function updateSlider(){ + const slider = document.getElementById('timeSlider'); + const N = gTimes.length; + slider.max = N > 0 ? String(N-1) : '0'; + if (N > 0 && gCurrentIdx >= 0) { + const sliderVal = (N - 1) - gCurrentIdx; // 值越大越新 + slider.value = String(sliderVal); + } + slider.disabled = N === 0; + } document.getElementById('btnPrev').addEventListener('click', async ()=>{ - if(gTimes.length===0) return; if(gCurrentIdx<0) gCurrentIdx=0; if(gCurrentIdx{ - if(gTimes.length===0) return; if(gCurrentIdx>0){ gCurrentIdx--; const dt=gTimes[gCurrentIdx]; document.getElementById('timeSelect').value=dt; await loadTileAt(dt);} updateCountAndButtons(); + if(gTimes.length===0) return; if(gCurrentIdx>0){ gCurrentIdx--; const dt=gTimes[gCurrentIdx]; document.getElementById('timeSelect').value=dt; await loadTileAt(dt);} updateCountAndButtons(); updateSlider(); + }); + document.getElementById('timeSlider').addEventListener('input', async (e)=>{ + const N = gTimes.length; if (N === 0) return; + const raw = parseInt(e.target.value, 10); + const sliderVal = Math.max(0, Math.min(N-1, isNaN(raw)?0:raw)); + const idx = (N - 1) - sliderVal; // 反向映射到数组索引(0=最新) + if (idx === gCurrentIdx) return; + gCurrentIdx = idx; + const dt = gTimes[gCurrentIdx]; + document.getElementById('timeSelect').value = dt; + await loadTileAt(dt); + updateCountAndButtons(); }); diff --git a/templates/radar_nanning.html b/templates/radar_nanning.html index 7b63923..1b0af73 100644 --- a/templates/radar_nanning.html +++ b/templates/radar_nanning.html @@ -41,7 +41,7 @@
-
最新 7/40/102 瓦片信息
+
7/40/102 瓦片信息
时间:
索引:z= / y= / x=
@@ -51,7 +51,7 @@
-
最新雷达站气象(南宁雷达站,第八台气象站)
+
雷达站气象(南宁雷达站,第八台气象站)
站点:
位置:
@@ -87,6 +87,10 @@
+ +
+ +
@@ -151,6 +155,7 @@ gCurrentIdx = 0; } updateCountAndButtons(); + updateSlider(); } catch {} } @@ -595,6 +600,7 @@ await loadTileAt(v); } updateCountAndButtons(); + updateSlider(); }); document.getElementById('tsQuery').addEventListener('click', async ()=>{ const s = fromDTLocalInput(document.getElementById('tsStart').value); @@ -621,6 +627,7 @@ await loadTileAt(dt); } updateCountAndButtons(); + updateSlider(); }); document.getElementById('btnNext').addEventListener('click', async ()=>{ if (gTimes.length === 0) return; @@ -631,6 +638,31 @@ await loadTileAt(dt); } updateCountAndButtons(); + updateSlider(); + }); + + // 滑动条联动 + function updateSlider(){ + const slider = document.getElementById('timeSlider'); + const N = gTimes.length; + slider.max = N > 0 ? String(N-1) : '0'; + if (N > 0 && gCurrentIdx >= 0) { + const sliderVal = (N - 1) - gCurrentIdx; // 值越大越新 + slider.value = String(sliderVal); + } + slider.disabled = N === 0; + } + document.getElementById('timeSlider').addEventListener('input', async (e)=>{ + const N = gTimes.length; if (N === 0) return; + const raw = parseInt(e.target.value, 10); + const sliderVal = Math.max(0, Math.min(N-1, isNaN(raw)?0:raw)); + const idx = (N - 1) - sliderVal; // 反向映射到数组索引(0=最新) + if (idx === gCurrentIdx) return; + gCurrentIdx = idx; + const dt = gTimes[gCurrentIdx]; + document.getElementById('timeSelect').value = dt; + await loadTileAt(dt); + updateCountAndButtons(); }); // 兜底加载最新 loadRealtimeLatest().catch(err => {