2013-06-02 47 views
0

我相信这只是我没有正确理解JavaScript的基础知识。但是有人可能会指出,为什么我有这样的印象,即我的if语句在事件冒泡时评估为真,即使if语句中的语句应该计算为false?为什么javaScript/jQuery似乎忽略事件冒泡的IF语句?

if(sFormula> 168)似乎按照预期工作,当我一次按一下html < a>标记时,但如果我快速点击它,一切似乎都会变得疯狂。

这是一个jsFiddle,代码如下:http://jsfiddle.net/twimB/pGHrP/以下只是整体的一小部分。

如果有人可以花时间解释,我将不胜感激。

谢谢。

的Html

<a href="#" id="right">&raquo;</a> 

jQuery的

$("#right").click(function(event){ 
    event.stopImmediatePropagation(); 
    if(busy == false){ 
     busy = true ; 
     var parentMargin = $(".wrap").offset().left; 
     var parentWidth = $(".wrap").width(); 
     var carouselMargin = $(".block").offset().left; 
     var carouselWidth = $(".block").width(); 
     var rFormula = carouselWidth - ((parentMargin - carouselMargin) + parentWidth); 
     $(".pLeft").text(""); 
     $(".pRight").text("if (rFormula > 0) {perform slide} fFormula is: " + rFormula); 
     if(rFormula > 168){ 
      $(".block").animate({"left": "-=168px"}, "slow"); 
     } 
     busy = false ; 
    } 
}); 
+0

嗨菲利克斯,通过使用if语句我试图防止发生,如果在.block元素的最后一个对象是滑动。所示。 – user9349193413

回答

4

.animate()方法不停止执行脚本。会发生什么情况是它启动动画并且脚本执行继续,并且busy立即设置为false。

你需要做的是设置标志在动画完成后才会使用一个回调函数:

if(rFormula > 168){ 
    busy = true; 
    $(".block").animate({"left": "-=168px"}, "slow", function() { busy = false }); 
} 

(请注意,我也搬到了这里设置的标志,因为没有益处动画之前设置它开始)

演示:http://jsfiddle.net/pGHrP/1/(我只更新右侧的按钮)

+0

许多人都非常感谢Juhana,它只是起作用。 – user9349193413