Angular2 移动端手势识别与实现1

公司APP项目基于Angular2+Ionic 最近需要实现一个支持向上\向下滑动显示不同内容的页面,实际实现时发现有如下的坑:

1.移动端有自己的默认上滑\下滑事件,并不识别Ionic自带的识别指令,只能识别on-swipe指令且只支持左右滑动

  on-swipe-up 和 on-swipe-down 指令完全无法使用

2.如果自己实现必须要捕获触摸事件,TypeScript中事件捕获要么使用传统的addEventListener

//事件监听
 public eventListener(){
   document.addEventListener('click', function(e: MouseEvent) {
     alert(213)
   });
 }

要么使用Angular2核心模块的@HostListener机制捕获事件

@HostListener('touchstart')
dealwith1(){
  this.OrClientY = event['targetTouches'][0].clientY
}
@HostListener('touchend')
dealwith2(){
  if(event['changedTouches'][0].clientY>this.OrClientY){
    this.allcon = false
  }else if(event['changedTouches'][0].clientY<this.OrClientY){
    this.allcon = true
  }
}

第一种方式并不适合TypeScript的表达方式,必须把document.addEventListener封装在另一个函数中,并且在构造函数中调用,十分不方便,所以我选择了第二种方式

解决以上问题后,来看看我的实现原理吧:

上下滑动实现原理如下:

1.监听touchstart事件,当手指触摸屏幕时候触发,即使已经有一个手指放在屏幕上也会触发

使用变量this.OrClientY将本次event所触碰的clientY属性记录下来

换句话说把每次用户刚开始滑动屏幕时的Y坐标记录下来

2.监听touchend事件,当手指从屏幕上离开的时候触发

每次比对捕获到的touchend事件当前Y坐标,如果这个Y大于this.OrClientY那么就表示'上滑'

如果Y小于this.OrClientY则表示'下滑'.代码中this.allcon是控制angular2页面ngIf指令的一个标记.


同理可以实现左右滑动的判定,甚至也可以实现任意方向,甚至可以控制滑动距离,这种解决方案相对不依赖框架和平台,可以作为当前框架没有支持时的一种备选.

缺点也很明显,如果要实现较为复杂的手势判定则需要编制较为复杂的代码,需要对平面几何有一定的了解.

以前看书时会看到说JS基础很重要,现在看来,任何一个框架都不可能面面俱到,总会面临各种不符合需求的情况,此时就需要使用JS支持写出弥合缝隙的代码,而不是说你只需要会框架就可以的.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值