简体   繁体   English

阻止孩子在hammer.js 中触发父事件

[英]Stop child from triggering parent event in hammer.js

When binding an hammer event to a element, the event is also triggered by it's child element.将锤子事件绑定到元素时,该事件也由其子元素触发。 Using stopPropagation to keep the event from bubbling up doesn't seem to work.使用stopPropagation来防止事件冒泡似乎不起作用。

HTML: HTML:

<div id="parent">
    <div id="child"></div>
</div>

JS: JS:

var hammertime = new Hammer(document.getElementById('parent'));

hammertime.on('tap', function(e) {
    e.srcEvent.stopPropagation();
    alert('Clicked on ' + e.target.id);
});

See JSFiddle for example: http://jsfiddle.net/qqvyqzgh/3/参见 JSFiddle 例如: http : //jsfiddle.net/qqvyqzgh/3/

What am I missing here?我在这里错过了什么?

You can check if the target of the event is the parent element. 您可以检查事件的目标是否为父元素。

var element = document.getElementById('parent');
var hammertime = new Hammer(element);

hammertime.on('tap', function (e) {
    if(e.target === element) {
        alert('Clicked on ' + e.target.id);
    }
});

Here's your updated fiddle . 这是您更新的小提琴

Adding to @Guglie's answer, For a more general case, add a class to all elements in children you want to disable the hammer event:添加到@Guglie 的答案中,对于更一般的情况,向要禁用锤子事件的子项中的所有元素添加一个类:

<div>
  Drag me
  <input class='disableHammer' type="range" placeholder="Don't drag me"></input>
</div>

and;和;

hammertime.on('pan', function(e) {
  if(e.target.classList.contains("disableHammer")) alert('Stop dragging him.');
})

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM