是否存在预定义的滚动事件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
相关产品推荐
相关产品推荐

