Angular获取DOM元素

Angular可以通过@ViewChild装饰器来获得页面的DOM元素

    @ViewChild('fixedCard2')
    fixedCard2!: ElementRef;

这样可以获得页面上名为fixedCard2的组件,

<mat-card #fixedCard2>固定的card</mat-card>

但是这个只能获取组件,当我希望获取组件当前的位置的时候(因为我希望实现当页面向上滑动的时候,组件也向上滑动,最终固定在顶部的功能。类似于csdn首页右侧那一栏,一直往下滑会固定不动),但是获取的是组件,里面获取不到offsetTop属性也没有getBoundingClientRect()方法:

找了一圈才发现解决方案:Angular: nativeElement is undefined on ViewChild - Stack Overflow

说了这么一句:

If you want to get a reference of an element that hosts a component or directive you need to specify that you want the element instead of the component or directive

 我的理解是,如果要获取DOM,就要直接指明

于是就变成这样(就是加了一个read):

    @ViewChild('fixedCard', { read: ElementRef})
    fixedCard!: ElementRef;

看看最后的打印结果

 扑面而来的是nativeElement,而这个,就是原生的DOM元素,里面就什么都有啦;

PS:

突然发现了不一样的地方:

通过offsetTop获取的是组件相对整个页面的距离,上下滚动时值是不变的,

而通过getBoundingClientRect().top获取的值是相对当前显示的页面的距离,如果逐渐上划而导致除了屏幕,那么这个值会是一个负值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值