我怎样才能制作像这里http://ljudi_kryma.tass.ru/这样的视差效果?
.cover {
height: 100%;
height: 100vh;
min-height: 700px;
background: chocolate;
}
.container {
height: 2000px;
background: gray;
}
<div class="cover">обложка</div>
<div class="container">текст</div>
我不知道同事们在哪里看到视差,但这里有一个解决方案的草图。
简要本质:有一个固定位置的盖子,它位于一切之上。
有一个包含我们内容的容器,最初位于同一位置。在滚动事件中,我们将滚动量一直带到页面边框。
容器顶部有一个调光器,具有相同的尺寸,一个普通的黑色层,根据位置,我们将其透明度收起来,沿着画布平行于容器移动它。
有一个提示元素,它有一个容器的大小,在封面之后有一个固定的位置。它位于一切之下,需要模拟更大的页面大小,以便滚动条的大小不会跳跃。
这里的主要问题是如何使容器在需要时向上滚动而不是向上拖动。在这里检查 scrollTop 有帮助,如果页面滚动超过屏幕大小,则不会传输元素。
最简单的解决方案,恕我直言:
container设置margin-top> 50vh,当滚动页面时,我们将固定cover值向上移动一个 double 值window.pageYOffset(通过 styletop)。因此,封面将在视口上方以两倍于滚动的速度“爬行”。而当封面完全隐藏时,
content顶部的缩进 'a 将等于其margin-top负 50vh。有一个明显的细微差别——当封面可见时,内容会在滚动时移动。在移动设备上查看时,这会产生一些视差效果(在问题链接的示例中,没有)。
上述选项的演示。
upd:刚才我看电脑——不像手机浏览器,这一切看起来很丑,因为滚动速度较高,缺乏流畅性。
container唯一的选择是通过抵消自身top,但这不适用于移动浏览器(事实证明,一种方式在移动浏览器上看起来不错,另一种在桌面浏览器上看起来不错,但没有通用选项......)。带切换的演示
content.style.top(不适用于移动浏览器,文本会抽搐)。ps:我的版本与上一个答案中指出的版本没有根本的不同——首先,我想解释一下这种实现的逻辑。