You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否存在预定义的滚动事件DOM Event对象?Angular如何指定滚动事件类型

解答

关于滚动事件的类型

DOM 规范中没有单独定义ScrollEvent接口,滚动事件触发的事件对象本身就是标准Event类型,你调试时看到的结果是正确的。

你遇到的Event类型上不存在offsetHeight属性的报错,本质是Event.target的默认类型为通用EventTarget类型,需要将其收窄到你实际绑定滚动事件的元素类型(此处为HTMLElement)即可,全程不需要使用any类型。


推荐实现方案

方案1:手动类型断言(写法最简单)

直接对target做明确的类型断言,符合你当前的代码逻辑习惯:
component.ts

onScroll(scrollEvent: Event) {
    const target = scrollEvent.target as HTMLElement;
    let offsetHeight = target.offsetHeight;
    // 剩余逻辑
}

方案2:类型守卫(类型安全性最高)

通过instanceof判断做运行时校验,TypeScript 会自动完成类型推断,不需要手动断言:
component.ts

onScroll(scrollEvent: Event) {
    if (!(scrollEvent.target instanceof HTMLElement)) return;
    let offsetHeight = scrollEvent.target.offsetHeight;
    // 剩余逻辑
}

方案3:模板直接传参(不用处理事件对象)

如果只需要用到元素的特定属性,可以直接在模板中提取对应属性传递给处理函数:
component.html

<div (scroll)="onScroll($event.target.offsetHeight)">
    ...more elements here
</div>

component.ts

onScroll(offsetHeight: number) {
    // 直接使用入参即可
    // 剩余逻辑
}

内容的提问来源于stack exchange,提问作者Nam Le

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 08:06:03