【发布时间】:2021-12-06 18:46:17
【问题描述】:
我正在尝试根据滚动百分比使某个图像从文档顶部移动到其底部,例如,当您加载网站时,该图像将位于页面顶部并且当用户向下滚动它时'将根据整体文档百分比一点一点下降,直到 100% 位于底部。
我在 stackoverflow 和其他网站上经历了很多类似的解决方案,但只有两个似乎接近我需要的解决方案。
第一个有效,但仅适用于在代码中手动调整的一个分辨率:
var imgscroll = document.getElementById('myimg');
window.addEventListener('scroll', function() {
var scrollposition = window.scrollY;
imgscroll.style.top = scrollposition * 0.1323 + 'vh';
}
第二个来自 stackoverflow 的答案 - located here and copied below - 我认为百分比部分是我需要的,但无法使其工作(图像停止移动):
var container = document.getElementById('container');
var windowHeight = window.innerHeight;
var windowWidth = window.innerWidth;
var scrollArea = 1000 - windowHeight;
var square1 = document.getElementsByClassName('square')[0];
var square2 = document.getElementsByClassName('square')[1];
// update position of square 1 and square 2 when scroll event fires.
window.addEventListener('scroll', function() {
var scrollTop = window.pageYOffset || window.scrollTop;
var scrollPercent = scrollTop/scrollArea || 0;
square1.style.left = scrollPercent*window.innerWidth + 'px';
square2.style.left = 800 - scrollPercent*window.innerWidth*0.6 + 'px';
});
对于如何获得答案的任何帮助或提示,我将不胜感激。
【问题讨论】:
-
叫做“视差滚动”
-
@Dai 我在寻找解决方案时尝试了视差滚动,不幸的是这不是我所需要的,图像需要始终可见,并且每次滚动内容时向下移动一点,图片没有其他变化。
-
如果视口比图片小怎么办?
-
性能提示:不要使用阻塞的
scroll事件监听器,而是使用passive事件:stackoverflow.com/questions/46542428/…,并避免设置position样式属性。而是使用transform: translateY(...)- 这样效果会非常平滑,因为它不会导致追溯 DOM 更新(阻塞渲染循环)。 -
图像宽度被限制在
vw单位,因此它会调整(还在其他分辨率上测试了这种调整大小并且图像确实调整了)。我还是新手,所以感谢您的提示,我会确保阅读有关转换方法的信息!
标签: javascript html css scroll responsive