jQuery按顺序显示/隐藏div,并且不重叠

问题描述:

我试图在按下按钮后,按时间顺序依次显示一组div,并同时用网络摄像头拍照并发送它到服务器。我已经有了这个工作,但是当我双击鼠标时,该功能会触发不止一次,导致div互相重叠。jQuery按顺序显示/隐藏div,并且不重叠

我正在使用jQuery在特定时间显示和隐藏适当的div,我试过使用.one处理程序,但它似乎没有工作?我不确定自己是否做错了什么,或者如果有更好的办法可以做到这一点?

谢谢!

var stages = []; 
stages.push(document.getElementById('one')); 
stages.push(document.getElementById('two')); 
stages.push(document.getElementById('three')); 
stages.push(document.getElementById('four')); 

var currentStage = 0; 

stages[currentStage].style.display = 'block'; 

function clickHandler() { 
    setTimeout(showModal, 3000); 
} 


function showModal(){ 

    stages[currentStage].style.display = 'none'; 
     currentStage++; 

     if (currentStage >= 3) currentStage = 0; 

     stages[currentStage].style.display = 'block'; 

} 

$("#analyse").one("click", function() { 
    $("#one").fadeOut("fast", function() { 
      clickHandler(); 
      $("#two").fadeIn("slow", function() { 

       setTimeout(function(){$("#three").fadeIn()},6000); 
       setTimeout(function(){$("#three").fadeOut()}, 7000); 
       setTimeout(function(){$("#four").fadeIn()}, 7000); 

      }); 
    }); 
}); 

您需要在第一次点击后锁定点击以防止按钮垃圾邮件。您可以用一个标记来实现此目的,并且只要输入$("#analyse").one(),就放置一个if (flag == true)并立即将该标记转换为false

一旦完成所有工作,7秒钟后,似乎将其更改为true

编辑

var canClick = true; 

$("#analyse").one("click", function() { 
    // Check if can start executing 
    if (canClick) { 
     // Stop next executions 
     canClick = false; 

     // After 8 seconds, allow executing again 
     setTimeout(function() { 
      canClick = true; 
     }, 8000); 

     $("#one").fadeOut("fast", function() { 
      clickHandler(); 
     $("#two").fadeIn("slow", function() { 

      setTimeout(function(){$("#three").fadeIn()},6000); 
      setTimeout(function(){$("#three").fadeOut()}, 7000); 
      setTimeout(function(){$("#four").fadeIn()}, 7000); 
     }); 
    }); 
}); 
+0

道歉,我很新的JavaScript和jQuery。我将在哪里将这个标志放在我的代码中? – Pete

+0

我编辑了回复。像这样的东西应该可以工作,你可以将我的8000毫秒变成任何你喜欢的东西。 – Ted

+0

还添加了对理解的注释 – Ted

不是标志,你也可以解除绑定的:

$( “#分析”)解除绑定( '点击');

但通常即使双击也只能调用一次函数。因此,我建议您尝试之前:

$("#analyse").unbind('click'); 
$("#analyse").one("click", function() { 
    $("#one").fadeOut("fast", function() { 
      clickHandler(); 
      $("#two").fadeIn("slow", function() { 

       setTimeout(function(){$("#three").fadeIn()},6000); 
       setTimeout(function(){$("#three").fadeOut()}, 7000); 
       setTimeout(function(){$("#four").fadeIn()}, 7000); 

      }); 
    }); 
}); 

我认为它可能是你双击绑定click事件,所以解除绑定前可以修复它。如果不是只是将其添加到函数内部。

$("#analyse").one("click", function() { 
     $("#analyse").unbind('click'); 
     $("#one").fadeOut("fast", function() { 
       clickHandler(); 
       $("#two").fadeIn("slow", function() { 

        setTimeout(function(){$("#three").fadeIn()},6000); 
        setTimeout(function(){$("#three").fadeOut()}, 7000); 
        setTimeout(function(){$("#four").fadeIn()}, 7000); 

       }); 
     }); 
    }); 
+0

这似乎阻止了divs的重叠,但是当双击它似乎显示一个接一个更快的div。有没有一种方法可以触发一次,因此fadeIn/fadeOut定时器完成剩下的工作? – Pete

+0

@Pete不理解你的问题,它和以前一样快/慢。如果您想更改速度,请在淡入调用之后更改定时器(毫秒)。目前,#3秒会在6秒后消失,1秒后消失。 4秒钟后也会消失。 – Doomenik