在动画完成之前,jQuery会阻止多次点击
目前我有一些设置,用户点击图像并基于该图像,div将淡入/淡出。
如果用户发疯并同时点击一堆图像,则会加载多个div,而不仅仅是最后请求的div。
我试图在这里说明我的问题。 http://jsfiddle.net/BBgsf/
单击任何这些图像将加载相应的div与数字。 但是如果在动画完成之前单击不同的图像,它也会加载其他div。
jQuery的
$(".flow-chart img").click(function () { var div_class = $(this).data("class"); $(".hide_show:visible").fadeOut('slow', function() { $("."+div_class).fadeIn("slow"); }); });
HTML
如何防止多个div加载而不是一次只加一个?
一种方法是跟踪动画当前是否处于活动状态。 这是一个简单的方法: http : //jsfiddle.net/QCWgR/
var active = false; $(".flow-chart img").click(function () { if (active) { return; } active = true; var div_class = $(this).data("class"); $(".hide_show:visible").fadeOut('slow', function() { // note the callback that sets active to false at end of animation $("."+div_class).fadeIn("slow", function() { active = false; }); }); });
使用这种方法,第一次单击必须完成动画循环才能发生下一个动画循环。
使用闭包来保持活动的全局命名空间
要保持活动状态不在全局命名空间中,您可以在匿名闭包内运行整个块,如下所示:
(function () { var active = false; $(".flow-chart img").click(function () { if (active) { return; } active = true; var div_class = $(this).data("class"); $(".hide_show:visible").fadeOut('slow', function() { $("."+div_class).fadeIn("slow", function() { active = false; }); }); }); })();
虽然你已经得到了答案..你可以检查是否有任何使用:动画选择器动画的元素..如果有返回false
$(".flow-chart img").click(function() { if ($(".hide_show").filter(':animated').length > 0) { return false; } var div_class = $(this).data("class"); $(".hide_show:visible").fadeOut('slow', function() { $("." + div_class).fadeIn("slow"); }); });