CSS translateY正在扩展文档长度



我正试图使用CSS来翻译屏幕外的网站内容,并在加载文档时将其动画化。

但是当加载页面时,文档长度会垂直延伸到内容翻译的底部。在页面上呆一段时间后,这种情况似乎会消失,但我显然想把这个问题全部删除。

这是我对内容的样式,它在页面加载完成时添加了类.load

main {
    transform:translate3d(0,100%,0);
    -moz-transform:translate3d(0,100%,0);
    -webkit-transform:translate3d(0,100%,0);
    transition: transform 800ms cubic-bezier(.17,.67,.12,.96);
    -moz-transition: -moz-transform 800ms cubic-bezier(.17,.67,.12,.96);
    -webkit-transition: -webkit-transform 800ms cubic-bezier(.17,.67,.12,.96);
}
main.load {
    transform:translate3d(0,0,0);
    -moz-transform:translate3d(0,0,0);
    -webkit-transform:translate3d(0,0,0);
}

我做过几次类似的事情,都没有遇到任何问题,但我似乎不明白这有什么不同。任何帮助都将不胜感激!

您的选项:

  1. 使用z-index和重叠内容,在翻译元素所在的位置设置内容以掩盖它。当它滚动到时,你可以从另一个元素下把它翻译出来
  2. 改为从侧面平移。通过这种方式,您可以使用overflow-x:hidden,并且仍然可以垂直滚动
  3. 使用display:nonetransition: opacity .3s(带前缀(和opacity:0,等待元素在页面上可见(用javascript检测到(,然后更改为display:blockopacity:1
  4. 绝对定位元素。这会将元素从流中删除,从而不会占用滚动空间(建议(

此外,没有理由使用translate3d,您可以只使用translateY(100%),它不会强制硬件加速

您需要制作一个高度为100%的封装器div,以隐藏溢出。你仍然可以在这个包装器分区下面有内容。

http://jsfiddle.net/2HuLw/1/

HTML

<div id="main" class="loading">
    <div id="inner" class="loading">
        <p>intro content.</p>
    </div>

</div>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>

<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>

JS-

window.addEventListener('load', function() {
    document.querySelector('#inner').classList.remove('loading');
})

CSS

html, body {
    height: 100%;
}
body {
    margin: 0;
}
#main {
    background: orange;
    height: 100%;
    overflow: hidden;
}
#inner {
    background: red;
    transition-duration: 600ms;
    overflow: scroll;
    height: 100%;    
}
#inner.loading {
    transform: translateY(100%);
}
$('main').ready(function(){ 
    setTimeout(function() {
        $('main').addClass('load');
        setTimeout(function() {
            $('body').css("overflow-y", "scroll");
            setTimeout(function() {
                $('body').css("overflow-y", "scroll");
            },1);
        },800);
    },500);
});

这可能是草率的,但它工作

800毫秒是动画所需的时间,因此一旦动画就位,它就会达到溢出属性,然后在1毫秒后再次达到溢出属性。

尝试了许多函数的组合,结果就是这样。

最新更新