From ce8bf191b7885cdab5cfb351f837b5ea89c1d4e3 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Fri, 26 Dec 2025 10:29:44 +0800 Subject: [PATCH 1/5] =?UTF-8?q?refactor:=20=E5=A2=9E=E5=BC=BA=E6=BB=9A?= =?UTF-8?q?=E5=8A=A8=E8=A7=86=E5=8F=A3=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Menu/Menu.razor.js | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/BootstrapBlazor/Components/Menu/Menu.razor.js b/src/BootstrapBlazor/Components/Menu/Menu.razor.js index 1f6c3ff584e..1a5b2571eba 100644 --- a/src/BootstrapBlazor/Components/Menu/Menu.razor.js +++ b/src/BootstrapBlazor/Components/Menu/Menu.razor.js @@ -1,4 +1,4 @@ -import { getTargetElement, getTransitionDelayDurationFromElement } from "../../modules/utility.js" +import { getTargetElement, getTransitionDelayDurationFromElement } from "../../modules/utility.js" import Data from "../../modules/data.js" export function init(id) { @@ -48,7 +48,7 @@ export function init(id) { } Data.set(id, menu) - scrollElementToView(menu.element) + scrollElementToView(menu) } export function update(id) { @@ -74,13 +74,13 @@ export function update(id) { } }); - scrollElementToView(menu.element) + scrollElementToView(menu) } export function scrollToView(id) { const menu = Data.get(id) if (menu) { - scrollElementToView(menu.element); + scrollElementToView(menu); } } @@ -97,13 +97,23 @@ export function dispose(id) { }) } -const scrollElementToView = element => { +const scrollElementToView = menu => { + const { element } = menu; const scroll = element.hasAttribute('data-bb-scroll-view') if (scroll) { - var links = [...element.querySelectorAll('.nav-link.active')] - if (links.length > 0) { - var link = links.pop() - link.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'start' }); - } + let count = 0; + menu.handler = setInterval(() => { + if (count < 3) { + var links = [...element.querySelectorAll('.nav-link.active')] + if (links.length > 0) { + clearInterval(menu.handler); + menu.handler = null; + + var link = links.pop() + link.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'start' }); + } + } + count++; + }, 100); } } From eaf1fb3af2cd337f5de504e17fa29797ed9efacb Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Fri, 26 Dec 2025 10:30:42 +0800 Subject: [PATCH 2/5] =?UTF-8?q?refactor:=20=E5=A2=9E=E5=BC=BA=20dispose=20?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Menu/Menu.razor.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/Components/Menu/Menu.razor.js b/src/BootstrapBlazor/Components/Menu/Menu.razor.js index 1a5b2571eba..ebf8a273b68 100644 --- a/src/BootstrapBlazor/Components/Menu/Menu.razor.js +++ b/src/BootstrapBlazor/Components/Menu/Menu.razor.js @@ -86,7 +86,12 @@ export function scrollToView(id) { export function dispose(id) { const menu = Data.get(id) - Data.remove(id) + Data.remove(id); + + if (menu.handler) { + clearInterval(menu.handler); + menu.handler = null; + } menu.collapses.forEach(el => { const target = getTargetElement(el) From f531c0d46ff1396060141e1d4a9b00c126ebdf38 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Fri, 26 Dec 2025 10:30:58 +0800 Subject: [PATCH 3/5] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E6=B6=88=E9=99=A4=E6=8F=90=E7=A4=BA=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Menu/Menu.razor.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/BootstrapBlazor/Components/Menu/Menu.razor.cs b/src/BootstrapBlazor/Components/Menu/Menu.razor.cs index 87c05ab1b9b..81ab6c1ef98 100644 --- a/src/BootstrapBlazor/Components/Menu/Menu.razor.cs +++ b/src/BootstrapBlazor/Components/Menu/Menu.razor.cs @@ -1,4 +1,4 @@ -// Licensed to the .NET Foundation under one or more agreements. +// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the Apache 2.0 License // See the LICENSE file in the project root for more information. // Maintainer: Argo Zhang(argo@live.ca) Website: https://www.blazor.zone @@ -144,11 +144,11 @@ private string GetUrl() var url = Navigator.ToBaseRelativePath(Navigator.Uri); if (url.Contains('?')) { - url = url[..url.IndexOf("?")]; + url = url[..url.IndexOf('?')]; } if (url.Contains('#')) { - url = url[..url.IndexOf("#")]; + url = url[..url.IndexOf('#')]; } return url; } From 89af2540b99e320bee6dc5c411cf9735d72e504b Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Fri, 26 Dec 2025 10:31:34 +0800 Subject: [PATCH 4/5] =?UTF-8?q?doc:=20=E6=9B=B4=E6=96=B0=E9=94=9A=E7=82=B9?= =?UTF-8?q?=E6=BB=9A=E5=8A=A8=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Layout/ComponentLayout.razor.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/BootstrapBlazor.Server/Components/Layout/ComponentLayout.razor.js b/src/BootstrapBlazor.Server/Components/Layout/ComponentLayout.razor.js index 608d939d0ca..5789aa26ae8 100644 --- a/src/BootstrapBlazor.Server/Components/Layout/ComponentLayout.razor.js +++ b/src/BootstrapBlazor.Server/Components/Layout/ComponentLayout.razor.js @@ -1,12 +1,12 @@ -export function scrollToAnchor() { +export function scrollToAnchor() { const hash = decodeURI(location.hash) if (hash) { const anchor = hash.split('-')[0] const el = document.querySelector(anchor) if (el) { const handler = setTimeout(() => { - el.scrollIntoView({ behavior: 'smooth', block: 'start' }) clearTimeout(handler) + el.scrollIntoView({ behavior: 'smooth', block: 'start' }) }, 1000) } } From 925a92b97bec26a968912ad24a51303f294cac3b Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Fri, 26 Dec 2025 10:32:01 +0800 Subject: [PATCH 5/5] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Layout/NavMenu.razor.js | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src/BootstrapBlazor.Server/Components/Layout/NavMenu.razor.js b/src/BootstrapBlazor.Server/Components/Layout/NavMenu.razor.js index c9a462db93b..8940a99cc15 100644 --- a/src/BootstrapBlazor.Server/Components/Layout/NavMenu.razor.js +++ b/src/BootstrapBlazor.Server/Components/Layout/NavMenu.razor.js @@ -1,21 +1,19 @@ -import Data from "../../_content/BootstrapBlazor/modules/data.js" +import Data from "../../_content/BootstrapBlazor/modules/data.js" import EventHandler from "../../_content/BootstrapBlazor/modules/event-handler.js" export function init(id) { - const navmenu = { - navbar: document.querySelector('.navbar-toggler'), - menu: document.querySelector('.sidebar-content') - } - Data.set(id, navmenu) + const navbar = document.querySelector('.navbar-toggler'); + const menu = document.querySelector('.sidebar-content'); + Data.set(id, { navbar, menu }); - EventHandler.on(navmenu.navbar, 'click', () => { - navmenu.menu.classList.toggle('show') + EventHandler.on(navbar, 'click', () => { + menu.classList.toggle('show') }) - EventHandler.on(navmenu.menu, 'click', '.nav-link', e => { + EventHandler.on(menu, 'click', '.nav-link', e => { const link = e.delegateTarget const url = link.getAttribute('href'); if (url !== '#') { - navmenu.menu.classList.remove('show') + menu.classList.remove('show') } }) } @@ -24,6 +22,7 @@ export function dispose(id) { const data = Data.get(id); Data.remove(id); - EventHandler.off(data.navbar, 'click'); - EventHandler.off(data.menu, 'click', '.nav-link'); + const { navbar, menu } = data; + EventHandler.off(navbar, 'click'); + EventHandler.off(menu, 'click', '.nav-link'); }