Angular 4滚动div一定量

时间:2018-05-27 06:55:46

标签: javascript html angular

我有一个高度为div的div,它有overflow-y: auto,所以必要时它有一个滚动条。
现在我希望能够在事件上滚动该div一定数量。到目前为止,我已经能够scrollIntoView(false)将其滚动到底部。我想几乎滚动它,但不是到底。我不想滚动窗口,因为这个div相对于窗口是position: fixed 从我所见,这在技术上是可行的,但人们一直在指各种插件。现在一个插件不是一个选项(可能是为了将来的某个版本,但现在不是)。

<form novalidate #searchFilterForm [formGroup]="filterForm" role="application">
<section id="searchFilters" role="form">
  <div class="search-filter-tab" #searchFilterTab>
    ..
  </div>
<div #searchFormContainer class="search-filter-container" >
  <div class="search-filter-header">  
    ...
  </div>
  <fieldset class="search-filter-checkboxes search-mobile-small" >
    ...
  </fieldset>
  <fieldset class="search-filter-sliders search-mobile-small" >
    ...
    </div>
  </fieldset>
  <fieldset class="search-filter-dropdowns search-mobile-small" >
    ...
  </fieldset>
  <fieldset >
    <span #scrollToHere></span>
    <div class="search-filter-text-input-container search-mobile-small" *ngFor="let textItem of searchBoxList; trackBy: trackByFunc; let i = index;">

      <app-auto-complete 
              #autoCompleteBoxes
              ...
              (showToggled)="scrollToEndOfFilter($event)"
              >
          <input 
            type="text" 
            autocomplete="off"
            [attr.name]="textItem.apiName" 
            [placeholder]="textItem.label" 
            [attr.aria-label]="textItem.label"         
            class="search-filter-text-input" 
            >
      </app-auto-complete>
    </div>
  </fieldset>
</div>
</section>
</form>     

打字稿:

scrollToEndOfFilter(ev){ //ev == {shown: true/false, ref: ElementRef}
    if (ev == null || (ev.shown == true && ev.ref)){
      this.searchFormContainer.nativeElement.scrollTop = 950;
    }
}

2 个答案:

答案 0 :(得分:2)

标准方法如何: 你可以像这样给你的div分配一个引用:

<div #divToScroll></div>

然后,你得到你的div的参考:

@ViewChild('divToScroll') divToScroll: ElementRef;

最后当你需要滚动时,你只需致电:

divToScroll.nativeElement.scrollTop = 30;

答案 1 :(得分:0)

当我们需要滚动元素时,这变得很乏味(比如说* ngFor中的特定div) 最好的方法是使用以下命令获取元素的当前位置和高度:

为每个div [attr.id]=" 'section' + data.id"动态分配ID

<div id="parentDiv" #parentDiv>
  <div *ngFor="let data of content" [attr.id]=" 'section' + data.id">
    <p>section {{data.id}}</p>
    <botton (click)="scrollMyDiv(data)"></button>
  </div>
</div>

和.ts

  scrollMyDiv(item) {
    let section = 'section' + item.id);
    window.scroll(0, 0);  // reset window to top 
    const elem = document.querySelector('#' + section);
    let offsetTop = elem.getBoundingClientRect().top` - x;  
    window.scroll(0, offsetTop);

  }`

getBoundingClientRect().top将从顶部给出高度。 x 是任何常量值,例如标题部分的高度。

它主要用于提供类似scrollspy的功能。