平滑jQuery转换

时间:2015-11-03 18:40:26

标签: javascript jquery html css jquery-animate

我有以下代码:

<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

我希望右侧的动画与左侧的动画一样平滑。如何才能做到这一点?我认为它在右侧减速的原因是因为它遍历所有LI以便找到最大索引,但我不确定。

1 个答案:

答案 0 :(得分:1)

从第一个if语句中删除&& visibleRows == 7,或将其更改为&& visibleRows >= 7,解决了这个问题。

当其中一个窗格处于转换状态时,visibleRows正在评估为8或更多,这导致它停止,并且它不会继续,直到鼠标再次移动。如果允许代码在鼠标向右移动时运行,则动画排队很好。