Ionic2 可以左右滑动的Segment

ionic2为我们提供了一个非常好的组件叫segment,一般的使用是没有问题的但是我们如果想要给segment加上一个可以滑动的事件的时候就会遇到一些问题,以下就是个人见解。
在ionic2中使用swipe的时候,没有像1中那样提供左滑还是右滑,而是使用的$event事件。这样就为我们处理左滑还是右滑带来麻烦,但是如果我们使用过HammerJS 的话我们就知道HammerJS 中处理事件是通过event的direction来判断是哪个方向。其对应关系如下:

NameValue
DIRECTION_NONE1
DIRECTION_LEFT2
DIRECTION_RIGHT4
DIRECTION_UP8
DIRECTION_DOWN16
DIRECTION_HORIZONTAL6
DIRECTION_VERTICAL24
DIRECTION_ALL30

有了这个对应关系我们就可以通过这个来进行左右滑动的判断了,以下是详细代码:

<ion-header>
  <ion-navbar no-border-bottom>
    <ion-title>
      Segments
    </ion-title>
  </ion-navbar>

  <ion-toolbar no-border-top>
    <ion-segment [(ngModel)]="segmentModel">
      <ion-segment-button value="segmentOne">
        segmentOne
      </ion-segment-button>
      <ion-segment-button value="segmentTwo">
        segmentTwo
      </ion-segment-button>
      <ion-segment-button value="segmentThree">
        segmentThree
      </ion-segment-button>
    </ion-segment>
  </ion-toolbar>
</ion-header>

<ion-content (swipe)="swipeEvent($event)">
  <div [ngSwitch]="segmentModel">
    <ion-list *ngSwitchCase="'segmentOne'">
      <ion-item>
        <ion-thumbnail item-left>
          <img src="assets/icon/favicon.ico">
        </ion-thumbnail>
        <h2>segmentOne</h2>
      </ion-item>
    </ion-list>

    <ion-list *ngSwitchCase="'segmentTwo'">
      <ion-item>
        <ion-thumbnail item-left>
          <img src="assets/icon/favicon.ico">
        </ion-thumbnail>
        <h2>segmentTwo</h2>
      </ion-item>
    </ion-list>

    <ion-list *ngSwitchCase="'segmentThree'">
      <ion-item>
        <ion-thumbnail item-left>
          <img src="assets/icon/favicon.ico">
        </ion-thumbnail>
        <h2>segmentThree</h2>
      </ion-item>
    </ion-list>
  </div>
</ion-content>
import { Component } from '@angular/core';

import { NavController } from 'ionic-angular';

@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {
  segmentsArray = ['segmentOne','segmentTwo','segmentThree'];
  segmentModel: string = this.segmentsArray[0];
  constructor(public navCtrl: NavController) {
  }

swipeEvent(event){
  //向左滑
if(event.direction==2){
  if(this.segmentsArray.indexOf(this.segmentModel)<2){
this.segmentModel = this.segmentsArray[this.segmentsArray.indexOf(this.segmentModel)+1];
  }
}
//向右滑
if(event.direction==4){
  if(this.segmentsArray.indexOf(this.segmentModel)>0){
this.segmentModel = this.segmentsArray[this.segmentsArray.indexOf(this.segmentModel)-1];
  }
}
}
}

在ionic升级后因为考虑到ion-content涉及到滚动,官方不建议在ion-content上面使用手势事件。
所以我们需要在子节点上使用手势事件。例如:

<ion-content>
 <div (swipe)="swipeEvnet($event)">
</div>
</ion-content>

如果实在要在ion-content节点使用可以借助第三方手势事件js来操作,比如HammerJs。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值