2
由于各种原因,我一直在尝试使用HTML5画布制作视差效果效果。我一直使用window.scrollY属性来确定用户滚动的距离,因此可以使用此值计算转换。使用window.scrollY进行画布计算会导致问题
我想这是最好的通过an example解释说:
function draw() {
scrollOffset = window.scrollY;
ctx.clearRect(0, 0, width, height);
ctx.fillStyle = "#000";
ctx.fillRect((width/2) - (size/2), ((height/2) - (size/2)) + scrollOffset, size, size);
requestAnimationFrame(draw);
}
正如你所看到的,这取决于你用什么浏览器,会有引起您滚动“glitchiness”的不同级别。中心的广场应该始终保持在同一个位置,但是在跟上用户滚动的距离方面存在问题。
这个问题有多明显取决于您使用的浏览器; Chrome只有在连续快速更改滚动方向时才会引人注意,而Firefox和Edge则显而易见,无论滚动速度如何缓慢。
会有更好的方法来解决这个问题吗?
JS [滚动联效果](https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Scroll-linked_e ffects)由于异步滚动而存在这样的问题。通常解决方案是使用固定位置CSS。 –
@AlexanderO'Mara在正常情况下,我会使用'position:fixed',但在我的实际代码中,我正在做一个实际的“视差”效果(其中元素不会固定但随页面缓慢移动),而我有多个元素会以不同的速率移动。 – mattrick
在滚动过程中查看所有元素的“pointer-events:none”设置,这是使滚动效果更平滑的常用技巧。 – CBroe