横向滚动画廊特效(竖向滚动驱动横向平移,含进度条)
横向滚动画廊:竖向滚动驱动画廊横向平移,经典「横向走廊」浏览体验,底部渐变进度条实时反馈,sticky 定位 + transform 实现,零依赖自研。
效果演示(真实可交互)
➡️ 向下滚动:画廊横向平移,形成「横向走廊」浏览体验
演示区用内嵌滚动容器模拟页面滚动:向下滚动时画廊横向平移,滚动到一半时到达「终点页」。底部渐变进度条实时显示横向进度。
完整代码
<div class="hg-scroller">
<div class="hg-stage">
<div class="hg-view">
<div class="hg-track" id="hgTrack">
<div class="hg-card">01 极光</div>
<!-- 更多卡片…… -->
</div>
</div>
</div>
</div>
.hg-scroller { height: 460px; overflow-y: auto; }
.hg-stage { height: 920px; } /* 视口两倍:一半平移、一半收尾 */
.hg-view { position: sticky; top: 0; height: 460px; overflow: hidden; }
.hg-track { display: flex; gap: 20px; will-change: transform; }
function update() {
const max = scroller.scrollHeight - scroller.clientHeight;
const p = max > 0 ? scroller.scrollTop / max : 0;
const maxDist = track.scrollWidth - scroller.clientWidth;
track.style.transform = `translateX(${-p * maxDist}px)`;
}
scroller.addEventListener('scroll', update, { passive: true });
实现要点:position: sticky 让画廊视口在滚动过程中「钉」在容器顶部,竖向滚动距离按比例换算成横向平移量 -p × maxDist。舞台高度设为视口两倍:前半段完成平移,后半段露出终点页。整页使用同理,把滚动容器换成 window。
参数说明
| 参数 | 位置 | 说明 |
|---|---|---|
| 卡片数量/宽度 | .hg-card 的 flex-basis | 决定平移总距离 maxDist |
| 舞台高度 | .hg-stage 的 height | 视口 1.5-2 倍,越大平移越慢 |
| 平移换算 | -p * maxDist | 滚动进度 × 总距离,线性映射 |
| 进度条 | .hg-fill 宽度 | 可选装饰,横向进度反馈 |
| 监听对象 | window / 容器元素 | 整页或局部容器滚动 |
兼容性与性能
- 滚动回调只更新一条
transform(合成层属性),平移全程由 GPU 合成,60fps 无压力 position: sticky是浏览器原生特性,无需 JS 模拟粘性,避免滚动劫持带来的卡顿- 舞台高度、卡片宽度在
resize时重算一次即可;滚动中只读一次scrollWidth,无布局抖动 - 全浏览器兼容(Chrome / Safari / Firefox / Edge / iOS / Android 现代版本),无需任何 polyfill
常见问题
Q: 为什么叫「横向走廊」? 因为视觉上像在走廊里横移浏览:竖向滚动被「翻译」成横向位移,浏览完一组作品后自动进入下一屏,叙事感强,适合作品集与案例展示。
Q: sticky 在部分安卓浏览器上失效? 极老机型存在此问题。可退化方案:用 position: fixed + JS 同步容器位置,或直接降级为普通横向滚动;现代浏览器均正常。
Q: 平移距离和滚动距离对不上? 检查 maxDist 计算是否在卡片布局完成后执行:scrollWidth 需在图片/字体加载后读取,建议在 resize 与 load 时重算。
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(缓动曲线)等属性即可,代码中有注释说明。