如何在 Blazor 中订阅 onscroll 事件?

2024-03-14

我试图对 Blazor 中的 onscroll 事件做出反应,以便在用户向下滚动网页时为图像设置动画(类似于此网站上的品牌徽标:https://lebenswelten-stgabriel.at/ https://lebenswelten-stgabriel.at/)。我尝试过本机 onscroll 事件,也尝试使用 js 互操作,但它没有执行任何操作。这是目前 Blazor 中不可用的东西,还是我可能只是在错误的组件上监听滚动事件?


经过几次试验和错误后,我决定创建一个自定义 .net 服务,并在 js 端注册。该服务看起来像这样:

using System;
using Microsoft.JSInterop;

namespace myBlazorApp.Services
{
    public class ScrollInfoService: IScrollInfoService
    {
        public event EventHandler<int> OnScroll; 

        public ScrollInfoService(IJSRuntime jsRuntime)
        {
            RegisterServiceViaJsRuntime(jsRuntime);
        }

        private void RegisterServiceViaJsRuntime(IJSRuntime jsRuntime)
        {
            jsRuntime.InvokeVoidAsync("RegisterScrollInfoService", DotNetObjectReference.Create(this));
        }

        public int YValue { get; private set; }

        [JSInvokable("OnScroll")]
        public void JsOnScroll(int yValue)
        {
            YValue = yValue;
            Console.WriteLine("ScrollInfoService.OnScroll " + yValue);
            OnScroll?.Invoke(this, yValue);
        }
    }

    public interface IScrollInfoService
    {
         event EventHandler<int> OnScroll; 
         int YValue { get; }
    }
}

该服务从 DOM 接收 onscroll 事件并在 .net 端引发一个事件。这是 js 端脚本的样子:

window.onscroll = function() {
    if (window.scrollInfoService != null)
        window.scrollInfoService.invokeMethodAsync('OnScroll', window.pageYOffset);
}

window.RegisterScrollInfoService = (scrollInfoService) => {
    window.scrollInfoService = scrollInfoService;
}

然后,我将我的服务注入到任何需要它的 Blazor 组件中,如下所示:

@using myBlazorApp.Services
@inject IScrollInfoService scrollInfoService
@implements IDisposable

<div>
     ...
</div>

@code {

    protected override void OnInitialized()
    {
        scrollInfoService.OnScroll += OnScroll;
    }

    private void OnScroll(object sender, int yValue)
    {
        DoSomething(yValue);
    }

    public void Dispose()
    {
        scrollInfoService.OnScroll -= OnScroll;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Blazor 中订阅 onscroll 事件? 的相关文章

随机推荐

  • 删除 Django Crispy Form 中的标签

    有谁知道是否有正确的方法来去除酥脆形式的标签 我到目前为止 self fields field label 但这不是一个很好的解决方案 Just do self helper form show labels False 删除所有标签
  • Java BufferedReader 在循环之前检查循环的下一行

    我正在解析 csv 文件 对于 cvs 的每一行 我使用解析的值创建一个对象 并将它们放入一个集合中 在将对象放入地图并循环到下一个对象之前 我需要检查下一个 cvs 行是否与实际对象相同 但特定属性值不同 为此 我需要检查缓冲区的下一行
  • Djangolush 与 sqlclear 和syncdb

    谁能告诉我们之间是否有区别 gt manage py flush or reset and gt manage py sqlclear appname python manage py dbshell gt manage py syncdb
  • 何时何地调用 VB.NET 中的RemoveHandler?

    我正在开发 NET 1 1 中的 VB NET windows 窗体项目 我有这种类型的架构 非常简单 Public MustInherit Class BaseTestLogic Private TimerPoll As Timer Pu
  • 在 HTML 中设置自定义锚点

    我在帖子中看到过这个主题here https stackoverflow com questions 9380034 setting custom anchorpoint and here https stackoverflow com q
  • 如何解决此 TypeORM 错误“EntityRepository 已弃用,请改用 Repository.extend 函数”?

    但是 我在 Repository 类中找不到任何 Repository extend 方法 文档中也没有任何相关内容 怎么解决这个问题呢 类型版本 0 3 0 我正在使用 Nest js 并尝试创建自定义存储库 首先 npm install
  • PHPExcel $objWriter->save() 失败

    我正在使用 PHPExcel 根据数据库中的记录创建一个 Excel 文件 在大型数据集上生成它时遇到一个奇怪的问题 我已将其范围缩小到一个引起问题的行 objWriter gt save php output 它只是输出一个空白文件而不是
  • PHP 中如何存储持久数据库连接?

    如文档中所述sqlite popen http de php net manual en function sqlite popen phpphp 尝试利用持久资源机制 哪里详细描述了这个机制 是否可以查看当前存储 使用的所有资源 是否可以
  • 在哪里放置不同测试类的通用设置代码?

    我有几个不同的测试类 它们要求在运行这些测试之前创建某些对象 现在我想知道是否应该将对象初始化代码放入单独的帮助器类或超类中 这样做肯定会减少我的测试类中重复代码的数量 但也会降低它们的可读性 是否有如何处理单元测试的常见设置代码的指南或模
  • 存储缓冲区是否保存现代 x86 上的物理地址或虚拟地址?

    现代 Intel 和 AMD 芯片大存储缓冲区 https stackoverflow com a 54880249 149138在提交到 L1 缓存之前缓冲存储 从概念上讲 这些条目保存存储数据和存储地址 对于地址部分 这些缓冲区条目是否
  • GtKGLArea 无法创建 OpenGL 2.1 上下文

    我目前正在为我的游戏引擎项目开发一个简单的编辑器 虽然该项目似乎在我的主工作站 支持 OpenGL 3 3 的 GTX 650Ti 上运行得很好 但当我在我的设备上测试它时 它似乎被破坏了 测试桌面 GMA4500 最大支持 OpenGL
  • 无法让 GLFW 链接

    我正在尝试编译以下测试程序 include
  • jquery 使用变量中的名称按类选择元素

    我想在 jQuery 中对与某个类名匹配的所有元素执行一些操作 类名来自变量 如何使用我的变量按类进行选择 var x this attr href slice 1 这将设置x等于的名称class I want 现在我想选择具有该类名的所有
  • Sublime Text 3 中的 React.js 文件语法

    我使用 Sublime Text 3 作为我的代码编辑器 我在 React 中编写了一个基本的 hello world 示例 但是代码上的着色不正确 我尝试安装 Babel 插件 但即使在那之后 着色似乎也不起作用 如下图所示 仅仅安装它是
  • 扩展“Prettier - Code Formatter”无法格式化 - (Mac v8.0)

    Prettier 遇到无法格式化的问题 我选择了保存格式 默认格式设置为使用 Prettier 昨天工作正常 现在保存时或运行格式文档命令时没有格式化 没有更改任何设置 我确实尝试卸载并重新安装 Prettier 强制格式化文档也会返回错误
  • 如何在通用 Windows 应用程序中使用 System.Net.Http.HttpClient 忽略自签名证书

    我正在创建一个可移植类库 这意味着据我所知 我必须使用 System Net Http HttpClient 来调用我的 Web API 挑战在于 对于我的通用 Windows 应用程序 我无法弄清楚如何忽略由于 API 服务器可以拥有自签
  • Swift 中的二进制到十六进制

    我有一个二进制字符串 例如 00100100 我想要十六进制字符串 例如 24 Swift 中是否有一种将二进制转换为十六进制的方法 一个可能的解决方案 func binToHex bin String gt String binary t
  • 打印 java scriptlet 变量,就好像它是 JavaScript 变量一样

    你好 我需要在jsp内的标签内的javascript调用内输出一个java变量 例如
  • 启动时依赖 CLR 的程序集解析

    当程序启动时 CLR 是否尝试解析 不一定加载 所有依赖程序集 也就是说 依赖的大会决议是按需完成的吗 请注意 我不是在谈论 Assembly Load Reflective 类型的负载 JIT 编译器负责指导程序集的加载 以响应将 IL
  • 如何在 Blazor 中订阅 onscroll 事件?

    我试图对 Blazor 中的 onscroll 事件做出反应 以便在用户向下滚动网页时为图像设置动画 类似于此网站上的品牌徽标 https lebenswelten stgabriel at https lebenswelten stgab