2015-11-03 64 views
0

我有以下代碼:理順一個jQuery過渡

<script> 
    $(document).ready(
    function() 
    { 
     var middleIndex = 3; 
     var maxIndex = $("ul li").length - 1; 
     var minIndex = 0; 

     $('ul#reel li').mouseover(function() 
     { 
      var index = $(this).parent().children().index(this); 

      var tempIndex; 
      var showIndex; 
      var visibleRows = $("ul li:visible").length; 

      if(index > middleIndex && visibleRows == 7) 
      { 
       tempIndex = middleIndex - 3; 
       showIndex = middleIndex + 4; 

       if(tempIndex <= maxIndex && showIndex <= maxIndex) 
       { 
        $("ul li:eq("+tempIndex+")").hide(500); 
        $("ul li:eq("+showIndex+")").show(500); 
        middleIndex++; 
       } 
      } 
      else if(index < middleIndex) 
      { 
       tempIndex = middleIndex + 3; 
       showIndex = middleIndex - 4; 

       if(tempIndex <= maxIndex && showIndex >= minIndex) 
       { 
        $("ul li:eq("+tempIndex+")").hide("slow"); 
        $("ul li:eq("+showIndex+")").show("slow"); 
        middleIndex--; 
       } 
      } 
     }); 
    }); 
</script> 

JSFIDDLE

我想在右側的動畫像左側動畫一樣光滑。如何才能做到這一點?我認爲它在右邊減速的原因是因爲它遍歷所有的LIs以便找到最大的索引,但我不確定。

回答

1

從第一條if語句中刪除&& visibleRows == 7或將其更改爲&& visibleRows >= 7可解決此問題。

當其中一個窗格正在轉換時,visibleRows正在評估爲8或更多,導致它停止,並且在鼠標再次移動之前它不會繼續。如果允許代碼在鼠標右移中心時運行,則動畫會很好地排隊。

+0

非常感謝!你今天保存了很多神經元:) – kjanko

+0

你知道如何讓它看起來像是從右向左移動還是逆向移動而不會退色?對於例如是左邊的圖片以50%的寬度顯示,右邊的圖片以50%的寬度顯示(這將需要在ul寬度的邊界上發生) – kjanko

+0

您可能可以通過將UL放入DIV僅夠展示7個LI。隱藏DIV上的水平滾動條,使其不可見。然後使用mouseover事件水平滾動DIV。 –