Search code examples
angulartypescriptionic-frameworkionic2ionic3

How to scroll element into view when it's clicked


Am looking for something similar to scrollIntoView() within Ionic2 to use when I click on a button, for example.

None of the methods detailed in ion-content help.


Solution

  • Please take a look at this working plunker

    You can use the scrollTo(x,y,duration) method (docs). The code is pretty simple, first we obtain the position of the target element (a <p></p> in this case) and then we use that in the scrollTo(...) method. First the view:

    <ion-header>
      <ion-navbar primary>
        <ion-title>
          <span>My App</span>
        </ion-title>
      </ion-navbar>
    </ion-header>
    
    <ion-content>
    
      <button ion-button text-only (click)="scrollElement()">Click me</button>
    
      <div style="height: 600px;"></div>
    
      <!-- Notice the #target in the p element -->
      <p #target>Secret message!</p>
    
      <div style="height: 600px;"></div>
    
    </ion-content>
    

    And the component code:

    import { ViewChild, Component } from '@angular/core';
    import { NavController, Content } from 'ionic-angular';
    
    @Component({
      templateUrl:"home.html"
    })
    export class HomePage {
      @ViewChild(Content) content: Content;
      @ViewChild('target') target: any;
    
      constructor() {   }
    
      public scrollElement() {
        // Avoid reading the DOM directly, by using ViewChild and the target reference
        this.content.scrollTo(0, this.target.nativeElement.offsetTop, 500);
      }
    }