平滑jQuery转换

Smooth out a jQuery transition

本文关键字:转换 jQuery 平滑      更新时间:2023-09-26

我有以下代码:

<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来找到最大指数,但我不确定。

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

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