繁体   English   中英

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

[英]How do I disable and then re-enable a Hammer Event properly using 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/

没关系,我在那里呆了一会儿……

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

换句话说,改变...

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

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

暂无
暂无

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

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