当前位置: 首页 > 面试题库 >

如何在Angular.js中使用Hammer.js

叶文博
2023-03-14
问题内容

我是Angular.js的新手,并且阅读我知道Angular没有诸如tap,doubletap等事件。我试图与Hammer.js结合使用而没有成功。

要点代码

/**
 * angular-hammer.js
 * Inspired by AngularJS' implementation of "click dblclick mousedown..." 
 *
 * This ties in the Hammer events to attributes like:
 * 
 *   hm-tap="add_something()"
 *   hm-swipe="remove_something()"
 *
 * and also has support for Hammer html" target="_blank">options with:
 *
 *  hm-tap-opts="{hold: false}"
 *
 * or any other of the "hm-event" listed underneath.
 */
angular.forEach('hmTap:tap hmDoubletap:doubletap hmHold:hold hmTransformstart:transformstart hmTransform:transform hmTransforend:transformend hmDragstart:dragstart hmDrag:drag hmDragend:dragend hmSwipe:swipe hmRelease:release'.split(' '), function(name) {
  var directive = name.split(':');
  var directiveName = directive[0];
  var eventName = directive[1];
  angular.module('MYMODULE').directive(directiveName, 
  ['$parse', function($parse) {
    return function(scope, element, attr) {
      var fn = $parse(attr[directiveName]);
      var opts = $parse(attr[directiveName + 'Opts'])(scope, {});
      element.hammer(opts).bind(eventName, function(event) {
        scope.$apply(function() {
          console.log("Doing stuff", event);
          fn(scope, {$event: event});
        });
      });
    };
  }]);
});

现在我已经添加到我的html文件中

<!--...-->
<script src="/js/jquery-1.9.0.js"></script>
    <script src="/js/angular.js"></script>

    <script src="/js/hammer.js"></script>
    <script src="/js/jquery.hammer.js"></script>
    <script src="/js/angular-hammer.js"></script>

    <script src="/js/app/controllers.js"></script>
</html>

但是,当我尝试在我的html中使用它时,它不起作用。

我尝试过

<li hmTap="click($event)">...</li>
<li ngTap="click($event)">...</li>
<li hm-tap="click($event)">...</li>
<li ng-tap="click($event)">...</li>

没有人可以解决这个麻烦吗?


问题答案:

快去

将Hammer.js和jquery.hammer.js添加到您的解决方案中。使用JQuery和Angular。

像这样:

<script src="js/jquery/jquery.min.js"></script>
<script src="js/hammer/hammer.js"></script>
<script src="js/hammer/jquery.hammer.js"></script>
<script src="js/angular/angular.min.js"></script>

然后使用Angular指令定义新的HTML属性。

在此示例中,我将创建一个名为 on-tap

angular.module('myApp.directives', [])
       .directive('onTap', function () {
         return function (scope, element, attrs) {
           return $(element).hammer({
             prevent_default: false,
             drag_vertical: false
           })
             .bind("tap", function (ev) {
               return scope.$apply(attrs['onTap']);
             });
         };
       });

然后,您可以为每个Hammer事件创建一个指令:

按住,点击,双击,transformstart,transform,transformend,dragstart,拖动,dragend,释放,滑动。

您的HTML将如下所示:

<button on-tap="DoAngularMethod()">Tap me</button>


 类似资料:
  • 问题内容: 可能这是最简单的事情,但是我无法以角度将字符串解析为Int。 我正在尝试做的是: 如何求和这些num1和num2值? 谢谢! 问题答案: 您不能(至少目前)不能使用内部角度表达式,因为它们不会直接求值。引用 文档 : Angular不使用JavaScript 来评估表达式。相反,Angular的服务处理这些表达式。 角表达式不必访问全局变量喜欢 ,或。此限制是有意的。它可以防止意外访问

  • 可能,这是最简单的事情,但是我不能在angular中将一个字符串解析为Int.. 我想做的是: 如何对这些num1和num2值求和? 谢谢!

  • 问题内容: 我有指令,它是带有后退按钮的网站标题,我想单击可返回到上一页。我如何以有角度的方式做到这一点? 我努力了: 这是指令js: 但什么也没发生。我查看了有关$ location 的angular.js API,但未找到有关后退按钮或的任何信息。 问题答案: 您需要在指令中使用链接函数: 参见jsFiddle。

  • 问题内容: 该应用程序正在运行,但无法识别Angular数据对象。 这是我得到的JavaScript错误: 这是angular.js中1059行附近的函数: 这是围绕4473行的函数: 我能够解决遇到的第一个错误: 通过包装所有angular.js与 这些错误来自我按照Angular.js主页上的待办事项列表示例创建的测试应用程序。 怎么办?根据我参加的一个免费的Microsoft活动,“很容易将

  • 问题内容: 我正在学习Angular.js并进行设置,我尝试使用select元素进行更改 我试着和用 该功能不起作用,但是当我仅将其设置为不具有功能时,该功能即起作用。 我也尝试创建更改指令: 但这也不起作用。Console.log根本不执行。 问题答案: 没有额外的代码,一切都可以正常工作: 就这样。这是一支笔。

  • 问题内容: 我已经搜索过Google,但找不到任何东西。 我有这个代码。 有这样的数据 输出是这样的。 如何将数据中的第一个选项设置为默认值,这样您将得到这样的结果。 问题答案: 您可以像这样简单地使用ng-init