滚动图片视差特效(容器内滚动,多层速度实时可调)

JSCSS 许可:自研原创

滚动图片视差特效:在滚动容器内让多层图片以不同速度平移,形成纵深层次,视差强度实时可调,偏移量限幅防露白,零依赖自研实现。

效果演示(真实可交互)

🏔️ 在下方容器内滚动:前景移动快、背景移动慢,形成视差纵深

01 山脊晨雾背景山体以 -0.28 倍速缓慢移动,前景松林 0.42 倍速,形成纵深
02 荒漠远海沙丘与海面错位移动,视差强度可在下方切换「强烈」查看效果
03 星河夜色夜色背景与前景剪影分层移动,速度差越大视觉纵深越强
偏移量已做 ±80px 限幅,防止图片边缘露白

演示区用内嵌滚动容器模拟页面滚动,每张「图片」由渐变图层构成(无需真实图片资源即可演示效果)。正式使用时把监听对象换成 window 或任意滚动容器即可。

完整代码

<div class="sp-scroller" id="spScroller">
  <div class="sp-slide">
    <div class="sp-img" data-speed="-0.28"></div>
    <div class="sp-img sp-fg" data-speed="0.42"></div>
  </div>
</div>
.sp-slide { position: relative; height: 300px; overflow: hidden; }
.sp-img {
  position: absolute; left: 0; right: 0; top: 50%; height: 140%;
  will-change: transform;
}
const sc = document.getElementById('spScroller');
const imgs = sc.querySelectorAll('.sp-img');

function update() {
  const vc = sc.getBoundingClientRect().top + sc.clientHeight / 2;
  imgs.forEach(img => {
    const r = img.parentElement.getBoundingClientRect();
    const offset = (r.top + r.height / 2) - vc;          // 元素相对视口中心的偏移
    const shift = offset * parseFloat(img.dataset.speed); // 速度系数决定移动快慢
    img.style.transform = `translateY(calc(-50% + ${shift}px))`;
  });
}
sc.addEventListener('scroll', update, { passive: true });
update();

核心公式:每张图片取其父区块中心到「视口中心」的距离,乘以各自的速度系数(负值表示反向移动),得到平移量。速度系数绝对值越大移动越快、视差越强;配合 height: 140% 与 overflow: hidden 保证移动过程中不露白边。

参数说明

参数位置说明
速度系数每个 .sp-img 的 data-speed负数反向慢移,正数同向快移,范围建议 -0.5 ~ 0.6
视差强度控件或 mul 乘数关闭 / 标准 / 强烈三档,本质是整体缩放速度系数
偏移限幅JS 中 Math.max(-80, Math.min(80, ...))防止滚动距离过大时图片边缘露白
图片高度.sp-img 的 height: 140%比容器高,保证上下平移都有余量
监听对象window 或滚动容器整页滚动或局部容器滚动均可

兼容性与性能

常见问题

Q: 滚动时图片边缘会露出背景色? 把 .sp-img 高度设为容器的 130%-150%,并给偏移量加限幅(本组件限制 ±80px),即可保证任何滚动位置都不露白。

Q: 和「滚动文字揭示」有什么不同? 视差强调的是「移动速度差」带来的空间纵深,元素始终可见;揭示强调的是「入场动画」,元素先隐藏再显现。两者可叠加使用。

Q: 性能有隐患吗? 注意三点:监听器加 passive、回调内避免读写布局属性混用、图片层数控制在 5 层以内。本组件演示同时满足,滚动全程不掉帧。

Q: 可以商用吗? 可以。本组件为粤喵自研原创代码,免费商用无需署名,无任何协议限制。

许可与来源

  • 许可证:自研原创 —— 粤喵自研原创,可免费用于个人与商业项目,无需署名。查看来源公示与许可清单
  • 来源:粤喵团队原创自研(从效果思路到代码实现均为独立完成,未直接复制第三方代码)
  • 首次发布:2026-09-01 · 最近更新:2026-09-01
  • 修改日志:2026-09-01 首次发布;2026-09-13 补充许可证与来源标注、复制按钮说明与法务页入口
  • 纠错:联系页面 / min@cactus.asia,2 个工作日内核实处理

常见问题

这个组件可以商用吗?

可以。本组件为粤喵自研原创,可免费用于个人和商业项目,无需署名。

浏览器兼容性如何?

支持所有现代浏览器(Chrome / Firefox / Safari / Edge 最新版本)。旧版 IE 不支持 CSS 动画相关特性。

怎么修改动画参数?

直接调整 CSS 中的 animation-duration(时长)、animation-timing-function(缓动曲线)等属性即可,代码中有注释说明。

✍️ 作者与审核