应用程序无法识别使用 Hammer.JS 和 Angular 中的 HammerGestureConfig 的滑动 9

App won't recognize swipes using Hammer.JS and HammerGestureConfig in Angular 9

我无法使用 Hammer.JS 在我的 Angular 应用程序中识别滑动。设置如下:

"@angular/core": "~9.0.0-next.6",
"hammerjs": "^2.0.8",
"zone.js": "~0.10.2"

app.module.ts 看起来像这样:

import { BrowserModule, HammerGestureConfig, HAMMER_GESTURE_CONFIG } from '@angular/platform-browser';
import * as hammer from 'hammerjs';

export class MyHammerConfig extends HammerGestureConfig {
  overrides = <any>{
    swipe: { direction: hammer.DIRECTION_HORIZONTAL },
    pinch: { enable: false },
    rotate: { enable: false }
  };
}

@NgModule({
  imports: [
    BrowserModule,
  ],
  providers: [
    {
      provide: HAMMER_GESTURE_CONFIG,
      useClass: MyHammerConfig
    }
  ],
})

app.component.ts有这个方法:

onSwipe() {
  console.log('swipe');
}

最后 app.component.html 看起来像这样:

<div (swipeleft)="onSwipe()" (swiperight)="onSwipe()">
  <h1>Swipe here</h1>
</div>

然而,swipeleftswiperight 都不会被触发 iPad 或 iPhone 都 运行 iOS 13.

我是否遗漏了任何关键配置?或者我对这段代码还有其他问题吗?


我还测试了这个 Stackblitz "blog-ng-swiping" 它在触摸设备上运行良好,但它使用的是 Angular 8.

事实证明 Angular 9 有一个新的 HammerModule 用于所有 Hammer.JS 相关的东西,也用于编译期间的 tree shaking。

因此,除了 Hammer.JS、手势等的整个配置之外,您还需要在您的应用中包含此模块,以使 Hammer.JS 与 Angular 一起工作 9:

import { HammerModule } from '@angular/platform-browser';

@NgModule({
  imports: [
    HammerModule
  ]
)}