如何在jQuery中防止其他点击事件在其中一个事件已经运行时运行?

5

我正在编写一个简单的淡入淡出幻灯片,带有“上一张”和“下一张”按钮。

问题是当我很快地点击“下一张”按钮(例如,点击两次),在第一个事件完成之前,第二个事件就会被执行,因此在不到一秒的时间内,我会看到页面上的两张图像。

    $("#next_button").click(function (){
        $("#slide"+current_slide).fadeOut(FADE_DURATION, function () {
            current_slide ++;
            current_slide = current_slide % slides_number;
            $("#slide"+current_slide).fadeIn(FADE_DURATION, function (){
                $(".slide_image").not("#slide"+current_slide).attr("style", "display: none;");
            });
        });
    });
  • fadeIn()之后的最后一行,我甚至尝试隐藏除了当前图像以外的所有内容,希望问题能得到解决,但这并没有起作用。

  • 我读到了一些关于event.stopImmediatePropagation()的东西,但我无法使用它,或者可能不是我的解决方案。

如何强制jQuery忽略在同样的事件完成之前执行任何类似的事件?

2个回答

3
您可以添加一个标记,用于指示您的滑块在过渡过程中是否处于中间状态:
var isSliding = false;

$("#next_button").click(function (){

  if(isSliding) {
    return false;
  }

  isSliding = true;

    $("#slide"+current_slide).fadeOut(FADE_DURATION, function () {
        current_slide ++;
        current_slide = current_slide % slides_number;
        $("#slide"+current_slide).fadeIn(FADE_DURATION, function (){
            $(".slide_image").not("#slide"+current_slide).attr("style", "display: none;");

            isSliding = false;
        });
    });
});

1
我简直不敢相信它是那么简单!我以为这一定涉及到事件处理之类的复杂问题,而我对此一无所知。 :) - Milad R
1
你也可以通过绑定/解绑事件来实现,但这会更加复杂。正如另一个回答者提到的那样,你可以在这里查看这些解决方案:https://dev59.com/YnI-5IYBdhLWcg3wTWdu如果你想了解更多关于jQuery中的事件绑定,可以在jQuery API文档中阅读相关内容:http://api.jquery.com/on/ - Mario Pabon

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接