我正在编写一个简单的带有previous
和next
按钮的渐变幻灯片。
问题是,当我点击next
按钮非常快(例如2次),在第一个事件完成之前,第二个事件将被执行,所以在不到一秒钟的时间里,我将在我的页面上看到两个图像。
$("#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
忽略执行任何类似的事件,在其中一个相同的事件,完成之前?
你可以添加一个标志来指示你的滑块何时处于过渡状态:
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;
});
});
});
你可以绑定和取消绑定,但如果你重复它很多次,它是时间消耗,如果你需要多次尝试看看这个答案:jQuery -我如何在事件被触发后暂时禁用onclick事件监听器?