2014-03-25 179 views
0

不工作我有依赖于父DIV从窗口的顶部是X像素运行的函数...如果else语句中的jQuery

 if (chartContainer <= 700) { 

      $('.firstChart').addClass('rotateLeft'); 
      $('.firstChart').animate({'left': 30}, 600); 
      $('.secondChart').addClass('rotateRight'); 
      $('.secondChart').animate({'right': 30}, 600); 

     } else if (chartContainer > 700) { 

      $('.firstChart').removeClass('rotateLeft'); 
      $('.firstChart').animate({'left': -300}, 600); 
      $('.secondChart').removeClass('rotateRight'); 
      $('.secondChart').animate({'right': -300}, 600); 

     } 

我的功能添加类细,但其如果我删除了我的else语句,第一个代码块中的add类和动画完美运行,任何人都可以看到任何错误的语法明智吗?

------- JS小提琴---------

http://jsfiddle.net/Gm9Fv/1/

+2

该元素是否有位置(除静态)和左值设置为开头。 – adeneo

+0

只是想:可能你必须在'else'语句中将'300'改成'30'。 –

+2

我可以看到错误的逻辑明智:如果A,否则如果不是A'。 –

回答

0

你们是不是要达到这样的事: http://jsfiddle.net/8QFzd/2/

IE 2块了屏幕(左和右隐藏),当您滚动接近他们,他们COMME到屏幕的中心?

var state = 1 ; 

$(window).on('scroll', function (e) { 

    var scrollTop = $(window).scrollTop() ; 
    var chartContainer = ($('.chartContainer').offset().top - scrollTop); 

    console.log(chartContainer); 

    if (chartContainer <= 200) { 
     if (state != 1) 
     { 
      console.log('<= 200, add Class & animate') ; 
      state = 1 ; 
      $('.firstChart').addClass('rotateLeft'); 
      $('.firstChart').stop().animate({ 
       'left': 30 
      }, 600); 
      $('.secondChart').addClass('rotateRight'); 
      $('.secondChart').stop().animate({ 
       'right': 30 
      }, 600); 
     } 

    } else { 
     if (state != 2) 
     { 
      console.log('> 200, remove Class & animate') ; 
      state = 2 ; 
      $('.firstChart').removeClass('rotateLeft'); 
      $('.firstChart').stop().animate({ 
       'left': -300 
      }, 600); 
      $('.secondChart').removeClass('rotateRight'); 
      $('.secondChart').stop().animate({ 
       'right': -300 
      }, 600); 
     } 
    } 

}); 
0

你需要等待.animate完成,然后触发下一个部分。

对于else块。

$('.firstChart').removeClass('rotateLeft'); 
$('.firstChart').animate({'left': -300}, 600, function(){ 
    $('.secondChart').removeClass('rotateRight'); 
    $('.secondChart').animate({'right': -300}, 600); 
}); 

相同的为if块。

P.S.让你的else if部分只是else。并且,确保您的元素具有非静态的定位,否则此代码可能无法工作。

+0

感谢@Gaurang Tandon,第二个图表元素不需要在第一个图表之后运行,但是他们都需要同时运行 – Liam

+0

好的,您可以分享您的完整HTML代码,并且CSS,以及整个JS代码,并可能在[fiddle](http://www.jsfiddle.net) –

+0

继承人jsFiddle @Gaurang Tandon http://jsfiddle.net/Gm9Fv/ – Liam