滚动单击不适用于 NavigationManager.NavigateTo,我无法使用 href,因为我需要 forceLoad 功能

Posted

技术标签:

【中文标题】滚动单击不适用于 NavigationManager.NavigateTo,我无法使用 href,因为我需要 forceLoad 功能【英文标题】:Scroll click not working with NavigationManager.NavigateTo, and I can't use href because I need forceLoad functionality 【发布时间】:2021-09-12 14:45:59 【问题描述】:

我有一个 Blazor Server Web 应用程序; .NET 5。

我在我的网络应用程序的页面之间导航时遇到了挫折:

当我使用NavigationManager.NavigateTo(uri, true) 时,我无法使用滚动单击打开链接(如果我改用href="uri",它将在新的浏览器选项卡中打开链接)。它会打开一个新标签页,但会加载我之前所在的页面。 当我改用href="uri" 时,滚动单击有效。但是,它引入了一个新问题:使用“普通”左键单击,新页面会加载但在移动浏览器中保留上一页的滚动位置(我已经使用移动 Safari 以及 Chrome 中的移动模拟器进行了测试) )。

我需要能够滚动单击进入新选项卡,以及在不保留前一页滚动位置的情况下加载新页面。有什么建议吗?

【问题讨论】:

Blazor 中没有允许我们滚动到页面上某个点的功能。目前只能通过 javascript 滚动到网页上的特定位置。你可以参考这个帖子:***.com/questions/55186784/… @NMSL 你误解了这个问题。我不是在寻找滚动到页面上某个点的能力。我将在此评论中解释我要做什么,但我只是重复我在 OP 中写的内容。 您所描述的左键单击和滚动位置不会发生在开箱即用的新项目中。也许您在添加到项目中的内容时引入了滚动位置问题。你可以为这个问题创建一个小型的公开重现吗? @MisterMagoo 只是为了明确一点-您是否正在使用 Desktop Chrome 的 iPhone 模拟器进行测试?那(以及在 iPhone 设备上)是我看到滚动位置行为的地方。 是的,我尝试过使用桌面 Chrome iphone 模式 - 你有自定义导航菜单吗?你在使用任何JS吗?您是否尝试过用一个全新的项目进行测试? 【参考方案1】:

假设您正在使用onclick 事件: onclick 事件不监听滚轮点击。要解决此问题,只需使用 onmousedown 事件:

<button class="btn btn-dark" @onmousedown="OnClick">Test</button>

@code 

    private void OnClick()
    
        NavigationManager.NavigateTo("/counter", true);
    


【讨论】:

以上是关于滚动单击不适用于 NavigationManager.NavigateTo,我无法使用 href,因为我需要 forceLoad 功能的主要内容,如果未能解决你的问题,请参考以下文章

滚动页面单击按钮以链接到同一页面

滚动页面单击按钮以链接到同一页面

scrollIntoView() 不适用于水平滚动(Selenium)

平滑滚动不适用于 Android RecyclerView 的初始滚动

ScrollTop 适用于 Chrome 和 Edge,但不适用于 Firefox

IsInViewport 不适用于 Ajax 无限滚动