Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the best way to implement swipe navigation in Angular 2?

Tags:

I'm new to Angular 2 and am looking for a way to implement a good tab touch swipe navigation for mobile users with a swipe transition to the next tab view.

So far I've found a package called angular2-useful-swiper although am not to keen on using it as I end up initializing my components early even though they are not in view.

Does anyone know a good way to implement a tab swipe based navigation for Angular 2? Any feedback will be greatly appreciated. : )

like image 711
Jonathan002 Avatar asked Mar 04 '17 04:03

Jonathan002


2 Answers

For the swipe detection here is a simpler solution than adding HammerJS:

In app.component.html:

<div (touchstart)="swipe($event, 'start')" (touchend)="swipe($event, 'end')">   App content here </div> 

In app.component.ts:

private swipeCoord?: [number, number]; private swipeTime?: number;  swipe(e: TouchEvent, when: string): void {   const coord: [number, number] = [e.changedTouches[0].clientX, e.changedTouches[0].clientY];   const time = new Date().getTime();    if (when === 'start') {     this.swipeCoord = coord;     this.swipeTime = time;   } else if (when === 'end') {     const direction = [coord[0] - this.swipeCoord[0], coord[1] - this.swipeCoord[1]];     const duration = time - this.swipeTime;      if (duration < 1000 //       && Math.abs(direction[0]) > 30 // Long enough       && Math.abs(direction[0]) > Math.abs(direction[1] * 3)) { // Horizontal enough         const swipe = direction[0] < 0 ? 'next' : 'previous';         // Do whatever you want with swipe     }   } } 

Note: I tried the HammerJS solution but configuring it to ignore mouse gestures was impossible because you don't have direct access to the Hammer object. So selecting some text was forcing navigation to the next page...

like image 106
pikiou Avatar answered Sep 24 '22 13:09

pikiou


You can use HammerJS to implement for touch actions, You can follow this plunker for example.

Include hammer.js file

<script src="https://cdnjs.cloudflare.com/ajax/libs/hammer.js/2.0.8/hammer.js"></script> 

or

npm install hammerjs --save 

For browser touch support with hammerjs, include

 <script src="http://cdn.rawgit.com/hammerjs/touchemulator/master/touch-emulator.js"></script> <script> 

Import in app.module.ts

import { HammerGestureConfig, HAMMER_GESTURE_CONFIG } from '@angular/platform-browser';  export class MyHammerConfig extends HammerGestureConfig  {   overrides = <any>{     'swipe': {velocity: 0.4, threshold: 20} // override default settings   } }  @NgModule({   imports: [BrowserModule],   declarations: [AppComponent],   bootstrap: [AppComponent],   providers: [{      provide: HAMMER_GESTURE_CONFIG,      useClass: MyHammerConfig    }] // use our custom hammerjs config }) 

plunker link for example

To implement tabs angular2-material is a good place to start, follow this link

like image 45
Rohit Vinay Avatar answered Sep 23 '22 13:09

Rohit Vinay