如何防止Dojo滑动手势冒泡?

pgx2nnw8  于 2022-12-16  发布在  Dojo
关注(0)|答案(2)|浏览(409)

我有一个看似简单的问题,但我似乎找不出我错在哪里。我的技能是公认的缺乏 dojo ,所以请原谅我的天真。

我想要达到的目标我在DOM中有一个元素,我想响应swipeclick事件。但是,当swipe.end事件被触发时,click事件也被触发。我已经尝试防止事件冒泡(在本例中,我假设事件是冒泡的),通过调用stopPropagation并在事件上直接调用event.stop,没有用。你可以看到下面的代码片段,或者查看一个working fiddle
超文本标记语言

<div id='testSwipe'>Swipe Me</div>​

苏丹

require({
}, [ 
    'dojo/dom', 
    'dojox/gesture/swipe',
    'dojo/on',
    'dojo/_base/event'
], function(dom, swipe, on, event) {
    var div = dom.byId('testSwipe');

    on(div, swipe.end, function(e) {
        console.log("### SWIPE");

        e.stopPropagation();  // Click event still fires
        event.stop(e);  // Click event STILL fires
    });

    on(div, 'click', function(e) {
        console.log("### CLICK");
    });
});

在此示例中,滑动事件将导致以下输出:

### SWIPE
### CLICK

有什么建议吗?

cnjp1d6j

cnjp1d6j1#

问题是触发了两个不同的事件:一个event(与event.type == 'swipe'一起)用于滑动,一个mouseEvent用于单击。
一种方法是在swipe.end事件刚刚触发时阻止click事件。这看起来有点像黑客攻击,但确实有效。请参见updated JSFiddle
作为旁注:看起来Dojo防止冒泡的方法是按照文档使用dojo.stopEvent(e)。我确实尝试了这个方法,但不出所料,它没有效果。

vmjh9lq9

vmjh9lq92#

当你点击元素时,点击事件总是会被触发,你可以使用dojox/gesture/tap来代替点击事件

on(div, tap, function(e) {
    console.log("### CLICK");
});

已更新fiddle

相关问题