Blazor WASM 滚动事件未触发

Blazor WASM scroll event not firing

我正在使用最新版本的 Blazor WASM 并尝试在滚动时为我的导航栏设置动画,但 onscroll 事件根本没有触发。

我已经在我的应用程序的不同位置尝试了来自 Blazor@onscroll 事件以及本机 onscroll 事件,但都不起作用。我也试过 JSInterop 订阅 window.onscroll 但它也不起作用。我唯一需要做的是来自 Blazor@onwheel 事件,但这不适用于其他类型的滚动。

目前 Blazor 根本不支持此功能还是我做错了什么?

在此document中,不建议@onscroll事件处理滚动。因为它可能会损害 UI 响应能力或消耗过多 CPU 时间。因此,您可能更喜欢使用 JS 互操作来注册触发频率较低的回调。

例如,在div中添加一个ElementReference。此代码在 Index.razor.

@inject IJSRuntime JS
@implements IDisposable

<div @ref="scrollElement" style="border:1px dashed red;height:100px;width:200px;overflow:auto">
In my younger and more vulnerable years my father gave me some advice that I've been turning over in my mind ever since.
<br><br>
'Whenever you feel like criticizing anyone,' he told me, just remember that all the people in this world haven't had the advantages that you've had.'
</div>

@code {
  ElementReference scrollElement;

  DotNetObjectReference<Index> selfReference;

  protected override async Task OnAfterRenderAsync(bool firstRender)
  {
    if (firstRender)
    {
        selfReference = DotNetObjectReference.Create(this);
        var minInterval = 500; // Only notify every 500 ms
        await JS.InvokeVoidAsync("onDivScroll",
            scrollElement, minInterval);
    }
  }

  public void Dispose() => selfReference?.Dispose();
}

创建一个 javascript 文件。

function onDivScroll(elem, interval) {
  elem.addEventListener('scroll', function(e) {
      console.log(e)
  }, interval);
}

然后在_Index.html中引用它。

<script src="./filename.js"></script>