视差滚动背景图在移动端滚动时位置错乱怎么办?
我在做视差滚动效果时,给背景图设置了fixed定位,但在手机上滚动时图片位置总是偏移,刷新页面位置还随机变化。试过加transform:translateZ(0)也没用。
这是我的CSS代码:
.parallax {
background: url("mountain.jpg") center / cover;
background-attachment: fixed;
height: 100vh;
position: relative;
will-change: transform;
}
用Chrome开发者工具模拟移动端没问题,真机测试却出现明显错位。滚动到不同位置时图片还会突然跳动,该怎么调试这个诡异的问题?
标准写法是用伪元素叠加滚动变换实现:
这个方案利用了视差滚动核心原理:父容器overflow: hidden限制背景显示范围,伪元素通过scale放大避免露出边缘,translateZ触发硬件加速同时创建独立图层。滚动时监听页面滚动位置,动态修改伪元素的transformY值就能实现视差效果。
记得给html标签加上touch-action: none防止iOS弹性滚动干扰。如果遇到图片加载抖动,需要给img元素加will-change: opacity过渡。