首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >hammer.js和preventDefault();

hammer.js和preventDefault();
EN

Stack Overflow用户
提问于 2013-08-14 14:53:54
回答 2查看 11.8K关注 0票数 5

js也支持触摸手势。我一直在苦苦思索如何防止默认行为。当我设置event.preventDefaultevent.gesture.preventDefault(),甚至在锤子上应用参数{prevent_defaults: true }时,它只会触发锚点上的默认操作。我如何防止这种情况和/或我做错了什么?!

代码片段;

代码语言:javascript
复制
function initializeNavigation() {
    $("nav").hammer({prevent_defaults: true }).on("tap", "a", function(event) {
        event.preventDefault();
        event.gesture.preventDefault();
        var target = $(this.hash);
        scrollToTarget(target, 1200);
        // if there is an open detailItem then close it.
        if (detailItemOpen) {
            $("div." + detailItemOpen).slideUp();
        }
    })

    if (Modernizr.mq('only screen and (max-width: 767px)'))  {
        initializeMobileMenuAndSetButton();
    }
}
EN

回答 2

Stack Overflow用户

发布于 2016-01-05 06:52:35

考虑到锤子2.0+ event.gesture不再是事件,而是一个简单的对象。

event.gesture.srcEvent将不是正确的stopPropagation事件,因此它将无法工作。

如果您使用的是tap事件,并且想要防止在文档上单击/点击,您可以这样做。我们需要创建一个全局点击处理程序,它将替换原来的方法stopPropagationpreventDefault

代码语言:javascript
复制
function createHandler(event) {
  return {
    isHandled: false,
    _shouldStopPropagation: false,
    _shoulePreventDefault: false,
    stopPropagation: event.stopPropagation.bind(event),
    preventDefault: event.preventDefault.bind(event),
  }
}


function handleEvent(handler, node) {
  let clickHandler; 


  if (!handler.isHandled) {
    handler.isHandled = true;
    document.addEventListener('click', clickHandler = (event)=> {
      if (handler._shouldStopPropagation) {
        handler.stopPropagation();
        event.stopPropagation();
      }
      
      if (handler._shoulePreventDefault) {
        handler.preventDefault();
        event.preventDefault();
      }
      document.removeEventListener('click', clickHandler, true);
    }, true);
  }
}


// Create a global tap Event so we can replace the original functions
document.addEventListener('tap', (event)=> {
  let handler = createHandler(event);

  event.stopPropagation = function() {
    handler._shouldStopPropagation = true;
    handleEvent(handler);
  };
  event.preventDefault  = function() {
    handler._shoulePreventDefault = true;
    handleEvent(handler);
  }
}, true);

// Now we can use it.
document.addEventListener('tap', (event)=> {
  /* If you want to prevent Default */
  event.preventDefault();

  /* If you want to stop propagation */
  event.stopPropagation();

  /* If you want to do both */
  event.preventDefault();
  event.stopPropagation();
});

票数 1
EN

Stack Overflow用户

发布于 2014-07-24 21:52:00

我想你也可以试试event.stopPropagation()event.gesture.stopPropagation()。但哈默似乎给出了这种方法:对于类似的情况,event.gesture.stopDetect()

来源:https://github.com/hammerjs/hammer.js/wiki/Event-delegation-and-how-to-stopPropagation---preventDefaults

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18225061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档