配置与angular2 Hammerjs事件 [英] Configure Hammerjs events with angular2

查看:1717
本文介绍了配置与angular2 Hammerjs事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何配置hammerjs事件angular2?

How can I configure hammerjs events in angular2?

要使用hammerjs与angular2事件我只是包括我的html像这样的活动:

To use hammerjs events with angular2 I just have to include events on my html like this:

<div (press)="onLongPress($event)"></div>

在此情况下( preSS )将有251毫秒的时间,默认情况下。
Hammerjs preSS事件文档

In this case (press) will have time of 251 milliseconds, by default. Hammerjs press event documentation

我怎么配置这个时候有不同的价值?

How do I configure this time to have different value?

推荐答案

这不是因为它的内部由CustomHammerGesturesPlugin类处理容易。我看到两种方法:

It's not something easy since it's internally handled by the CustomHammerGesturesPlugin class. I see two approaches:


  • 提供自己的锤插件并注册。当对象实例化,您需要提供您的配置,第二个参数:

  • Provide your own Hammer plugin and register it. When the Hammer object is instantiated, you need to provide your configuration as second parameter:

@Injectable()
export class CustomHammerGesturesPlugin extends HammerGesturesPlugin {
  addEventListener(element: HTMLElement, eventName: string, handler: Function): Function {
    var zone = this.manager.getZone();
    eventName = eventName.toLowerCase();

    return zone.runOutsideAngular(function() {
      // Creating the manager bind events, must be done outside of angular
      var mc = new Hammer(element); // <-------
      mc.get('pinch').set({enable: true});
      mc.get('rotate').set({enable: true});
      var handler = function(eventObj) { zone.run(function() { handler(eventObj); }); };
      mc.on(eventName, handler);
      return () => { mc.off(eventName, handler); };
    });
  }
}

由于使用引导功能,当 HammerGesturesPlugin 提供商自动注册,则需要使用此code到引导你的应用程序(见的https://github.com/angular/angular/blob/master/modules/angular2/platform/browser.ts#L110和<一个href=\"https://github.com/angular/angular/blob/master/modules/angular2/src/platform/browser_common.ts#L79\" rel=\"nofollow\">https://github.com/angular/angular/blob/master/modules/angular2/src/platform/browser_common.ts#L79):

Since the HammerGesturesPlugin provider is automatically register when using the bootstrap function, you need to use this code to bootstrap your application (see https://github.com/angular/angular/blob/master/modules/angular2/platform/browser.ts#L110 and https://github.com/angular/angular/blob/master/modules/angular2/src/platform/browser_common.ts#L79):

platform(BROWSER_PROVIDERS).application(appProviders).bootstrap(appComponentType);


  • 一个解决办法可能是为拦截对象的实例化(见的我可以拦截直接调用函数):

    <script>
      window.TargetHammer = window.Hammer;
      window.Hammer = function() {
        var mc = new TargetHammer(arguments[0]);
        mc.get('press').set({
          time: 1000
        });
        return mc;
      }
    </script>
    

    看到这个plunkr: https://plnkr.co/edit/eBBC9d?p = preVIEW

    否则,我不知道你使用的Angular2的版本,但有一个与锤事件问题(beta.0似乎是好):

    Otherwise I don't know which version of Angular2 you use but there is a problem with Hammer events (beta.0 seems to be okay):

    • https://github.com/angular/angular/issues/6993

    这篇关于配置与angular2 Hammerjs事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

  • 查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆