jquery滑块上下

时间:2012-01-09 14:44:32

标签: javascript jquery slidetoggle slidedown slideup

我遇到了jQuery slidingown和slideUp函数的问题。当点击按钮时,div向下滑动以显示更多内容 - 但是当它向下滑动时它会顺畅地向下移动一半然后它会像口吃一样 - 但是当我点击较少信息以使div恢复时,它会平稳过渡。我怎样才能确保它顺利滑下而不会在过渡期间中断?

<script type="text/javascript">
    $(document).ready(function () {
        // $(".image-gallery ul li:gt(5)").hide(0);
        $(".inner p:gt(2)").hide(0);

        $('a.moreInfoLink').toggle(
            function () {
                $('.inner p:gt(2)').slideDown(1000);
                $(this).text("Less info");
            },
            function () {
                $('.inner p:gt(2)').slideUp(1000);
                $(this).text("More info");
            }
        );
    });
</script>

HTML / .NET编码

<div class="slideContent">
    <div class="inner">
        <energy:TextPod ID="TextPod1" runat="server" CssClass="client-portfolio-intro" />
    </div>
</div>
<div class="clear-me"></div>

<div class="btnMoreInfo">
    <a class="moreInfoLink" href="javascript:;">More Information</a>
</div>

2 个答案:

答案 0 :(得分:2)

不确定是否是您的问题的解决方案,但只是为了一个好的做法,将您的选择存储在变量中并使用它们,这样jQuery不需要每次调用切换函数时都需要找到元素:

<script type="text/javascript">
    $(document).ready(function () {
        // $(".image-gallery ul li:gt(5)").hide(0);
        var content = $('.inner p:gt(2)'); // storing selection
        content.hide(0);

        $('a.moreInfoLink').toggle(
            function () {
                content.slideDown(1000);
                $(this).text("Less info");
            },
            function () {
                content.slideUp(1000);
                $(this).text("More info");
            }
        );
    });
</script>

答案 1 :(得分:0)

问题是性能问题 - 浏览器在尝试一次动画多个元素时可能会陷入困境,特别是如果这些元素导致文档“reflowed”。从本质上讲,您的选择器$('.inner p:gt(2)')会导致所有<p>元素独立动画,并且每个元素都会在每个点处重新生成文档。

要进行平滑过渡,请尝试设置包含要显示/隐藏的所有内容的单个包含元素的动画。我会使用HTML之类的东西:

<div class="slideContent">
    <div class="inner">
        <p>Something</p>
        <p>Something</p>
        <div class="fullInfo">
            <p>Something</p>
            <p>Something</p>
            <p>Something</p>
        </div>
    </div>
</div>

<div class="btnMoreInfo">
    <a class="moreInfoLink">More Information</a>
</div>

和JS一样:

$(".inner .fullInfo").hide(0);

$('a.moreInfoLink').toggle(
    function () {
        $('.inner .fullInfo').slideDown(1000);
        $(this).text("Less info");
    },
    function () {
        $('.inner .fullInfo').slideUp(1000);
        $(this).text("More info");
    }
);

这样,浏览器一次只能动画一个元素 - 速度更快!