为了账号安全,请及时绑定邮箱和手机立即绑定

滚动经过片段时,Angular 10 获取路由器活动片段?

滚动经过片段时,Angular 10 获取路由器活动片段?

人到中年有点甜 2022-11-27 17:05:28
我试图在导航中突出显示您正在滚动过去的活动片段。将片段和导航添加到片段很简单并且效果很好,例如:      class="nav-button unselectable"      matRipple      routerLink="/"      fragment="features"      [ngClass]="{ 'nav-active': (active_fragment | async) === 'features' }"但是路由器显然不知道你在滚动哪个元素,所以我试图监听滚动事件并使用 Y 位置检查最近的元素。但是我的着陆页不是我的导航的孩子,所以 viewchild 不起作用,例如:导航组件:  @ViewChild('features', { static: false })  private _features: ElementRef;  @HostListener('window:scroll', ['$event'])  private _update_active_fragment(event: any) {    event.preventDefault();    console.log(window.pageYOffset);    console.log(this._features.nativeElement);  }着陆页组件:  <app-features #features id="features"></app-features>但是 features native 元素是未定义的。我的问题是:我还能如何实现此功能?如何从导航组件中获取元素 ref?如何获取导航组件中 features 元素的 y 位置?
查看完整描述

1 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

做了一个新的导航服务:


public active_fragment: BehaviorSubject<string> = new BehaviorSubject('');


  constructor(private readonly route: ActivatedRoute) {

    this.route.fragment.subscribe((frag) => {

      this.active_fragment.next(frag);

    });

  }

在我的导航组件中:


      [ngClass]="{

        'nav-active': (navigationService.active_fragment | async) === 'home'

      }"

在包含我的片段的登陆组件中:


  @ViewChild('features', { read: ElementRef })

  private _features: ElementRef;

  @ViewChild('benefits', { read: ElementRef })

  private _benefits: ElementRef;



  @HostListener('window:scroll', ['$event'])

  private _update_active_fragment(event: any) {

    event.preventDefault();

    switch (true) {

      case window.pageYOffset >=

        this._some_previous_element.nativeElement.offsetTop &&

        window.pageYOffset <= this._features.nativeElement.offsetTop: {

        this.navigationService.active_fragment.next('network-rail-feedback');

        break;

      }


      case window.pageYOffset >= this._features.nativeElement.offsetTop &&

        window.pageYOffset <= this._benefits.nativeElement.offsetTop: {

        this.navigationService.active_fragment.next('features');

        break;

      }



      default:

        break;

    }

  }


查看完整回答
反对 回复 2022-11-27
  • 1 回答
  • 0 关注
  • 82 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信