<div class="hammer" (tap)="onSwiper($event)">tap</div>
<div class="hammer" (pinch)="onSwiper($event)">pan</div>
<div class="hammer" (panstart)="onSwiper($event)">panstart</div>
<div class="hammer" (panmove)="onSwiper($event)">panmove</div>
<div class="hammer" (pancancel)="onSwiper($event)">pancancel</div>
<div class="hammer" (panend)="onSwiper($event)">panend</div>
<div class="hammer" (panleft)="onSwiper($event)">panleft</div>
<div class="hammer" (panright)="onSwiper($event)">panright</div>
<div class="hammer" (panup)="onSwiper($event)">panup</div>
<div class="hammer" (pandown)="onSwiper($event)">pandown</div>
<div class="hammer" (pinch)="onSwiper($event)">pinch</div>
<div class="hammer" (pinchstart)="onSwiper($event)">pinchstart</div>
<div class="hammer" (pinchmove)="onSwiper($event)">pinchmove</div>
<div class="hammer" (pinchend)="onSwiper($event)">pinchend</div>
<div class="hammer" (pinchcancel)="onSwiper($event)">pinchcancel</div>
<div class="hammer" (pinchin)="onSwiper($event)">pinchin</div>
<div class="hammer" (pinchout)="onSwiper($event)">pinchout</div>
<div class="hammer" (press)="onSwiper($event)">press</div>
<div class="hammer" (pressup)="onSwiper($event)">pressup</div>
<div class="hammer" (rotate)="onSwiper($event)">rotate</div>
<div class="hammer" (rotatestart)="onSwiper($event)">rotatestart</div>
<div class="hammer" (rotatemove)="onSwiper($event)">rotatemove</div>
<div class="hammer" (rotateend)="onSwiper($event)">rotateend</div>
<div class="hammer" (rotatecancel)="onSwiper($event)">rotatecancel</div>
<div class="hammer" (swipe)="onSwiper($event)">swipe</div>
<div class="hammer" (swipeleft)="onSwiper($event)">swipeleft</div>
<div class="hammer" (swiperight)="onSwiper($event)">swiperight</div>
<div class="hammer" (swipeup)="onSwiper($event)">swipeup</div>
<div class="hammer" (swiperdown)="onSwiper($event)">swiperdown</div>
复制代码
直接使用报warning!
Hammer.js is not loaded, can not bind 'tap' event.
复制代码
yarn add hammerjs @types/hammerjs
复制代码
main.ts引入
import "hammerjs";
复制代码
完美支持
查看hammerjs文档,和@types/hammerjs源码!编写config
import { HammerGestureConfig, HAMMER_GESTURE_CONFIG } from '@angular/platform-browser';
import { InjectionToken, Optional, Inject, Provider, NgModule } from '@angular/core';
export interface HammerInstance {
on(eventName: string, callback: Function): void;
off(eventName: string, callback: Function): void;
}
export const HAMMER_OPTIONS = new InjectionToken<HammerOptions>('HAMMER_OPTIONS');
// 默认全开启
export class Iwe7HammerGestureConfig extends HammerGestureConfig {
private _hammer: HammerStatic = typeof window !== 'undefined' ? (window as any).Hammer : null;
// 原生
events: string[] = [
'longpress',
'slide',
'slidestart',
'slideend',
'slideright',
'slideleft',
];
constructor(
@Optional()
@Inject(HAMMER_OPTIONS)
public _hammerOptions: HammerOptions
) {
super();
}
buildHammer(element: HTMLElement): HammerInstance {
console.log(this._hammerOptions);
const mc = new this._hammer(element, this._hammerOptions || undefined);
const pan = new this._hammer.Pan();
const swipe = new this._hammer.Swipe();
const press = new this._hammer.Press();
const slide = this._createRecognizer(pan, { event: 'slide', threshold: 0 }, swipe);
const longpress = this._createRecognizer(press, { event: 'longpress', time: 500 });
pan.recognizeWith(swipe);
// 添加 swiper press pan slide longpress
mc.add([swipe, press, pan, slide, longpress]);
return mc as HammerInstance;
}
private _createRecognizer(base: Recognizer, options: any, ...inheritances: Recognizer[]): Recognizer {
let recognizer = new (base.constructor as RecognizerStatic)(options);
inheritances.push(base);
// 同时识别
inheritances.forEach(item => recognizer.recognizeWith(item));
return recognizer;
}
}
const hammerOptions: HammerOptions = {
cssProps: {
touchCallout: 'none',
touchSelect: 'none',
userDrag: 'none',
userSelect: 'none',
tapHighlightColor: 'red',
contentZooming: 'none'
}
};
export const Iwe7HammerOptionsProvider: Provider = [
{
provide: HAMMER_OPTIONS,
useValue: hammerOptions
}
];
export const Iwe7HammerConfigProvider: Provider = [
{
provide: HAMMER_GESTURE_CONFIG,
useClass: Iwe7HammerGestureConfig,
deps: [HAMMER_OPTIONS]
}
];
export const Iwe7HammerProvider: Provider = [
Iwe7HammerOptionsProvider,
Iwe7HammerConfigProvider
];
@NgModule({
providers: [Iwe7HammerProvider]
})
export class Iwe7HammerModule {
}
复制代码
了解@angular/platform-bowser中的常量
- EVENT_MANAGER_PLUGINS 事件管理器
- HAMMER_GESTURE_CONFIG hammer手势配置
更多推荐
angular内置手势库hammer.js
发布评论