【问题标题】:Javascript/jQuery animate to dynamic height?Javascript/jQuery 动画到动态高度?
【发布时间】:2013-03-01 21:16:54
【问题描述】:

有谁知道为什么这个动画很好:

function setContainerHeight() {
    $(".pagecontainer").animate({
        height: '700px'
    }, 500);
}

即一个固定的高度,但这根本没有动画?

function setContainerHeight() {
    $(".pagecontainer").animate({
        height: 'auto'
    }, 500);
}

它仍然自动调整大小,但没有动画,只是捕捉到它。

我的代码:

JS:

<script>

    function setContainerHeight() {
        $(".pagecontainer").animate({
            height: 'auto'
        }, 500);
    }

    $('.link').on('click', function(e){
        $('.pagecontainer>div').fadeOut(0);
        setContainerHeight();
        $(this.getAttribute("href")).fadeIn();
    });

</script>

CSS:

.pagecontainer {
min-height:450px;
width:80%;
min-width:800px;
padding:50px 0;
margin: 0 auto;
}
.pagecontainer>div{
display: none; /*wait until page needs to be faded in*/
padding-left:50px;
padding-right:50px;
position:relative;
}

HTML:

<div class="pagecontainer">

    <a href="#page1" class="link">page 1</a>
    <a href="#page2" class="link">page 2</a>
    <a href="#page3" class="link">page 3</a>

    <div id="page1">TONS OF TEXT HERE</div>

    <div id="page2">A BIT OF TEXT HERE</div>

    <div id="page3">BUNCH OF IMAGES</div>

</div>

有不同的 div 淡入/淡出,每个都需要不同的高度。页面的宽度也是动态的,但不需要动画,只是随着视口拉伸/收缩。

谢谢。

【问题讨论】:

  • 如果不阅读 jquery 代码,我猜 animate 不会知道它的结束高度。修复是找到它,然后给它一个整数动画。

标签: jquery resize jquery-animate height


【解决方案1】:

演示http://jsfiddle.net/zbB3Q/

Animate 不知道结束高度。您需要获取它然后制作动画,但要做到这一点,您必须快速设置高度并返回到动画前的状态。

function setContainerHeight() {
    var heightnow=$(".pagecontainer").height();
    var heightfull=$(".pagecontainer").css({height:'auto'}).height();

    $(".pagecontainer").css({height:heightnow}).animate({
        height: heightfull
    }, 500);
}

【讨论】:

  • var heightfull = $(".pagecontainer").css({height:'auto'}).height(); 被读取时,这不会触发 FOUC(无样式内容的闪烁)吗?
  • 不,太快了,这不像是浏览器显示了一些内容后js等待body.onload。
  • 我已经编辑了我的问题以包含我的 JS/CSS/HTML。 .pagecontainer 是整体容器,里面有几个 div 页面。页面发生变化,因此 .pagecontainer 应更改高度以反映它。我已经通过 var targetpage = $(this).attr("href"); 尝试了您的代码,然后获取了 targetpage 的高度,但它似乎不起作用。
  • var targetpage = $(this).attr("href");?那么你在用 targetpage (这是一个字符串)做什么?你是说var targetpage = $($(this).attr("href"));
【解决方案2】:

根据经验,我遇到了同样的问题,但您无法为auto 制作动画。但是,您可以事先获取容器高度,然后对其进行动画处理。例如。

function setContainerHeight() {
    newHeight = $('.pagecontainer').height();
    $(".pagecontainer").animate({
        height: newHeight
    }, 500);
}

【讨论】:

  • 这不会改变任何事情。
  • @popnoodles 啊是的你是对的,它没有,感谢教训。
【解决方案3】:

在这里聚会有点晚了,但我的一些代码中遇到了完全相同的问题。我编写了一个小型 jQuery 插件来解决这个问题 - 如果您仍然需要解决这个问题,可以使用 here

【讨论】:

    【解决方案4】:

    我做了一个小插件来处理这个问题——应该相当简单,基于 Darcy Clarke 的方法,该方法已发布 here,并进行了一些(imo)非常必要的改进。 jQuery 即插即用:

    https://github.com/azaslavsky/jQuery-Animate-Auto-Plugin

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-18
      • 2013-06-09
      • 2011-06-03
      • 1970-01-01
      • 1970-01-01
      • 2016-08-25
      • 2012-03-01
      • 1970-01-01
      相关资源
      最近更新 更多