…是使用Angular 9中的Hammer.js检测平移(或滑动)。
它应该像这样工作:
在图像中,green
显示了浏览器默认的所有内容,不应阻止。 blue
显示了锤子应防止和处理的所有事情。
不确定我的意思吗?看看Swiper
的演示。 They work exactly like this。
…这些都是我在Stackoverflow和其他博客文章的多次提问中发现的所有内容:
]import { BrowserModule, HammerModule, HammerGestureConfig, HAMMER_GESTURE_CONFIG } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import * as Hammer from 'hammerjs'; class MyHammerConfig extends HammerGestureConfig { // Test #1 overrides = <any>{ swipe: { direction: hammer.DIRECTION_HORIZONTAL }, pinch: { enable: false }, rotate: { enable: false } }; // Test #2 overrides = <any>{ swipe: { direction: Hammer.DIRECTION_ALL } }; // Test #3 options = { domEvents: true } // Test #4 buildHammer(element: HTMLElement) { const mc = new Hammer(element, { touchAction: 'pan-y' }); return mc; } // Test #5 buildHammer(element: HTMLElement) { const mc = new Hammer(element, { touchAction: 'auto' }); return mc; } } @NgModule({ declarations: [ AppComponent, ], imports: [ BrowserModule, AppRoutingModule, HammerModule ], providers: [ { provide: Window, useValue: window }, { provide: HAMMER_GESTURE_CONFIG, useClass: MyHammerConfig } ], bootstrap: [ AppComponent ] }) export class AppModule { }
所有这些东西都没有用,因为它们有不同的结果,并且在不同的设备(例如iPhone和iPad)上不一致:
…直接在组件中创建Hammer
,如下所示:
import { Component, OnInit, ViewChild, ElementRef, OnDestroy, ViewChildren, QueryList } from '@angular/core'; import * as Hammer from 'hammerjs'; @Component({ selector: 'app-hero', templateUrl: './hero.component.html', styleUrls: ['./hero.component.scss'] }) export class HeroComponent implements OnInit, OnDestroy { @ViewChild('list', { static: true }) list: ElementRef; private hammertime: Hammer; private isLocked: boolean = false; ngOnInit() { this.initHammer(); } ngOnDestroy() { // todo destroy hammertime } initHammer(): void { this.hammertime = new Hammer(this.list.nativeElement, {touchAction : 'auto'}); this.hammertime.get('pan').set({ direction: Hammer.DIRECTION_HORIZONTAL, threshold: 60 }); this.hammertime.on('panleft panright', event => { if (this.isLocked || event.maxPointers !== 1) { return }; this.goto(event.type === 'panLeft' ? 'next' : 'prev'); this.isLocked = true; setTimeout(() => this.isLocked = false, 1000) }); } }
这会做很多事情:
但是这些东西不起作用或不好:
Hammer
实例this.hammertime
和附加事件永不销毁pan
事件多次触发this.hammertime
?[我想要...是使用Angular 9中的Hammer.js检测平移(或滑动)。它应该像这样工作:应该检测到水平平移,对角平移应该达到一定程度……