如何使用Hammer.js正确禁用然后重新启用Hammer事件?

时间:2015-06-18 16:09:54

标签: javascript jquery hammer.js

我使用hammer.js和jquery.hammer.js来处理多种不同类型的事件(主要是点击事件)。

我创建了一个包装函数,用于任何/所有tap事件监听器声明。 这就是功能。

var OnClick = function(button, CallbackFunction, TurnBackOnAfterStartCallback)
{
    if(TurnBackOnAfterStartCallback != false)
    {
        TurnBackOnAfterStartCallback = true;
    }

    if(!button)
    {
        LogResult("Error: Attempted to create Hammer Click Event Listener without assigning a jQuery Object to listen too...");
        return;
    }

    if(!CallbackFunction)
    {
        LogResult("Error: Attempted to create Hammer Click Event Listener without assigning a Callback Function...");
        return;
    }


    $(button).hammer().on("tap", function(event)
    {
        var target = event.target;

        // Disable the button so that we can't spam the event....
        $(target).hammer().off("tap");

        // We receive the event Object, incase we need it...
        // Then we call our CallBackFunction...
        if(CallbackFunction)
        {
            CallbackFunction(target);
        }

        // Renable the button for future use if need be.
        if(TurnBackOnAfterStartCallback)
        {
            $(target).hammer().on("tap", CallbackFunction);
        }
    });
};

当我使用此功能注册事件时,它按预期工作。首先,它会禁用事件监听器,因此您可以通过单击100次按钮来发送垃圾邮件......就像这样......

$(target).hammer().off("tap");

然后,如果存在任何...

,它会预先形成任何回调功能
if(CallbackFunction)
{
    CallbackFunction(target);
}

最后,我们重新启用该按钮以供将来使用,除非我们已指定不会再次使用该按钮...

// Renable the button for future use if need be.
if(TurnBackOnAfterStartCallback)
{
    $(target).hammer().on("tap", CallbackFunction);
}

这在第一个事件发布期间完美运行...但是,一旦我再次触发事件,回调函数就会发送事件而不是event.target出于某种原因......

如果我删除.off和.on调用,那么它会按预期工作,但可以发送垃圾邮件......

对于一个实时示例结帐这个jsfiddle ...它将结果打印到控制台...第一个输出是正确的,之后的所有内容都没有按预期进行。 https://jsfiddle.net/xupd7nL1/12/

1 个答案:

答案 0 :(得分:0)

没关系,我那里有一个愚蠢的时刻......

问题是我直接调用了事件监听器而不是通过我的包装函数OnClick ...

换句话说改变......

if(TurnBackOnAfterStartCallback)
{
    $(target).hammer().on("tap", CallbackFunction);
}

if(TurnBackOnAfterStartCallback)
{
    OnClick(target, CallbackFunction, TurnBackOnAfterStartCallback);
}