向上滑动一个水平分割网页的“固定高度div”?

时间:2016-09-13 13:08:04

标签: javascript jquery html css infobox

我需要一个从我页面底部向上滑动的盒子。我将使用该框向新用户显示重要信息。例如,在注册后,该框将立即向上滑动并显示欢迎消息。

我已经this jsfiddle在某种程度上证明了所期望的行为。这只是一个从底部滑落的div:

$('.foot').addClass('slide-up', 500, 'easeOutBounce');

但是,代码只是举例说明,因为实现不充分,原因如下:

  1. 底部框具有预先确定的500px高度,因为它最初隐藏在浏览器下方500px。相反,我只需要盒子高度来适应它的内容。内容会有所不同,甚至会在加载后通过javascript进行更改。

  2. 底部框出现在其他元素之上。相反,我想将屏幕拆分为2.下半部分的高度与盒子内容的高度相同。上半部分的行为就像常规网页一样,即如果内容太多,用户可以向下滚动。要举例说明所描述的效果,您可以查看this jsfiddle (the code has no relevance though)

  3. 如何实现所描述的行为?

2 个答案:

答案 0 :(得分:0)

我已更新your Fiddle。请看下面的详细信息。

您不需要对position: fixed部分使用.foot,而是可以使用position: relative。由于我注意到你正在使用flex,我冒昧地使用相同的方法修复它。

所做的更改

  • 首先我建议添加一个div容器,给出一个类名称 - container
  • 制作容器display: flex&将默认方向更改为flex-direction: column
  • 现在,由于您希望main-content可以滚动,具体取决于其内容,因此您需要先使用height: 200px; 设置此部分的高度,并且然后使用overflow-y: auto;
  • 使其可滚动

如果您有任何疑问,请告诉我。

答案 1 :(得分:0)

在尝试了几种方法之后,我最终找到了一个解决方案,它结合了自由评论中的一些想法(修改主要div的大小)和Nikhil的答案(使用弹性容器)。您可以在此jsfiddle中看到结果。

对于以下标记:

<div id="divContainer">
    <div id="divTop">
        Main content
    </div>
    <div id="divFooter">
        Footer content
    </div>
</div>

这些风格:

html, body, form 
{
    margin: 0;
    padding: 0;
    overflow: hidden;
    height: 100%;
}
#divContainer
{
    width: 100%;
    height: 100%;
}
#divTop
{
    overflow-y: auto;
    padding: 8px;
    height: calc(100vh - 16px); /* Accounts for padding and border (if any) */
}
#divFooter
{
    padding: 12px;
    text-align: center;
    border: 1px solid black;
    border-top-left-radius: 25px;
    border-top-right-radius: 25px;
}
.containerEnd
{
    display: flex;
    flex-direction: column;
}
.topEnd
{
    height: auto;
    flex-grow: 1;
}

此Javascript代码用于为div元素设置动画:

function slideUpFooter() {
    var currentHeight = $('#divTop').height();
    var footerHeight = $('#divFooter').outerHeight(true);
    $('#divTop').animate(
        { height: currentHeight - footerHeight },
        2000,
        'easeOutBounce',
        function () {
            $('#divContainer').addClass('containerEnd');
            $('#divTop').addClass('topEnd');
        });
};

动画结束时调用的函数设置flexbox参数,以确保页脚粘贴到页面底部。