我有一个滚动动画,这是工作在一个'测试'页:https://wordpress-899937-3173615.cloudwaysapps.com/test/
问题是我不能让它在最后一页上工作,因为页面的高度不同,动画开始的时间比预期的要早得多。
var scroll = document.querySelector ('.curve');
window.addEventListener ('scroll', function(){
var value = 1 + window.scrollY / -200;
scroll.style.transform = `scaleY(${value})`;
})
{
margin:0;
padding:0;
}
body {
height:200vh;
background-color:#111;
}
section {
position:absolute;
width:100%;
height:100%;
background:#ff2;
}
section .curve {
position:absolute;
bottom:-200px;
height:200px;
width:100%;
transform-origin:top;
}
section .curve img{
width:100%;
height:100%;
<body>
<section>
<span class = "curve">
<img src = "https://wordpress-899937-3173615.cloudwaysapps.com/wp-content/uploads/2023/01/curve-white-300x59.png">
</span>
</section>
</body>
我需要帮助改进代码,使其更'响应'任何页面高度。
如何触发动画从100%到0%的视口?
1条答案
按热度按时间eoxn13cs1#
这可能对你有用。我建议在一个单独的文件中测试它,或者在JsFiddle上测试。我还建议你在各种分辨率下测试它,只是为了看看它是如何工作的。
提供的解决方案/建议使用检查DOM中元素可见性的修改版本,涉及滚动和元素位置,如this SO answer所示。
在你原来的WordPress链接中,源代码包含一个固定值-750作为除数(您最初的尝试使用-200)。不使用固定的数值,此修订建议使用
curve
元素与页面顶部的初始距离(getBoundingClientRecT().top
)。一旦curve
元素变为部分可见,该属性就开始起作用(不像之前的建议,使用了一个元素的完全可见性)-随着scrollY
的增加,比例因子减少,一旦你到达顶部,scaleY
将变为零,从而获得所需的效果。