第一次指定滚动条位置

时间:2018-03-05 06:48:29

标签: javascript html angular dart

我正在使用滚动并尝试通过给定的id在特定元素处启动它。

我的HTML看起来像:

<div class="list-wrapper" style="max-height:350px;overflow-y:scroll" >
   <div *ngFor="let el of elements">
     <div class="text-center" id="element_{{el.id}}"
        {{el.lebel}}
     </div>
   </div>
 </div>

在我的组件中

Future ngOnInit() async{
    await _apiService.getElements().then((resp){
    list = resp;
 });
 scrollToLastElement();
}

我的scrollToLastElement方法

void scrollToLastElement(){
    var wrapper = querySelector('.list-wrapper');
    Timer.run(() => wrapper?.scrollTop = wrapper?.scrollHeight);
}

但滚动始终指向第一个。 有什么建议吗?

3 个答案:

答案 0 :(得分:0)

您可以使用element.scrollTop和element.scrollLeft分别获取已滚动的垂直和水平偏移。如果你关心整个页面,element可以是document.body。如果需要百分比,可以将它与element.offsetHeight和element.offsetWidth(再次,元素可能是正文)进行比较。

参考: How to get scrollbar position with Javascript?

答案 1 :(得分:0)

使用

new Future.delayed(const Duration(seconds:1), () {});

代替Timer.run((){});将解决它。

谢谢大家。

答案 2 :(得分:0)

我认为你需要:

Future ngOnInit() async{
    await _apiService.getElements().then((resp){
    list = resp;
    scrollToLastElement();
    });
}

这应该可以在不更改滚动功能的情况下工作,如solution,它在1秒后执行滚动功能。一秒钟通常足以让apiService响应。但是如果需要更长的时间,那么滚动将无法正常工作,因为那时元素将不会被填充。