Angular 2: I would prefer to go with scrollIntoView() method scrollIntoView. It would provide smooth scrolling transition effect in the browser.
HTML Code
<div #info id="info">
<h3>Info</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
</div>
<div #structure id="structure">
<h3>Structure</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
</div>
<li>
<ul materialize="collapsible" class="collapsible" data-collapsible="accordion">
<li><a routerLink="policies" class="collapsible-header">Policies</a>
<div class="collapsible-body">
<ul>
<li (click)="infoStruc()"><a >Info</a></li>
<li (click)="moveToStructure()"><a >Structure</a></li>
<li><a >Something Else</a></li>
</ul>
</div>
</li>
</ul>
</li>
and in the Component.
@Component({
selector: 'my-app',
template: `template.html `
})
export class AppComponent {
@ViewChild('structure') public structure : ElementRef;
@ViewChild('info') public info : ElementRef;
public moveToStructure():void {
this.structure.nativeElement.scrollIntoView({ behavior: 'smooth', block: 'end', inline: 'start' });
}
public infoStruc():void {
setImmediate(() => {
this.info.nativeElement.scrollIntoView({ behavior: 'smooth', block: 'end', inline: 'start' });
});
}
}