有点像 JS 中的单例

Kinda singleton in JS

我想确保如果一个#offer img 触发了附加到事件处理程序的函数,那么在第一个函数完成其工作之前,没有其他#offer img 触发另一个函数。我发现为此我需要一个 Singleton。 这是我尝试做的事情:

$(document).ready(function () {
    var inProgress = false;
    $('#offer img').mouseover(function (event) {
        if (!inProgress) {
            inProgress = true;

            $('#offer div img').addClass('gray');
            $(event.target).removeClass('gray');

            var clickedId = event.target.id;
            var textId = '#' + clickedId.substr(0, clickedId.search('_'));
            $('.innerContent p:visible').fadeOut(300, function () {
                $(textId).fadeIn();
            });

            inProgress = false;
        } else {
            return;
        }
    }); 
});

不工作。这段代码有什么问题? 任何帮助表示赞赏:)

问题是在所有 fadeIn 和 fadeOut 函数完成解析之前,inProgress 立即设置为 False。所以你的 mouseOver 功能已经完成,但 fadeIn 和 fadeOut 还没有。

如果您希望在淡入完成之前不设置 inProgress,例如

        $('.innerContent p:visible').fadeOut(300, function () {
            $(textId).fadeIn(300, function(){
                inProgress = false;
            });
        });

    } else {
        return;
    }