滚动吸附轮播组件(scroll-snap 卡片轮播,吸附强度/自动播放可调)

CSSJS 许可:自研原创

滚动吸附轮播组件:纯 CSS scroll-snap 实现卡片自动吸附对齐,支持箭头导航、圆点指示、自动轮播与 proximity/mandatory 两种吸附模式,零依赖零图片,移动端触控体验流畅。

效果演示(真实可交互)

↔ 拖拽滑动或点击箭头浏览,卡片自动吸附对齐

🚀快速启动

页面秒开体验如飞

🎨渐变配色

沉浸式视觉呈现

📱触控友好

滑动自然吸附

⚡零依赖

纯 CSS + 原生 JS

🛡响应式

适配任意屏幕

💎免费商用

粤喵自研原创

完整代码

核心思路:容器开启 overflow-x: auto 与 scroll-snap-type: x mandatory,每张卡片设置 scroll-snap-align: start,浏览器即可在滚动停止时自动吸附到最近的卡片边缘,完全无需 JS 计算位移。

<div class="carousel" id="carousel">
  <section class="card"><b>第 1 张</b><p>滚动吸附轮播</p></section>
  <section class="card"><b>第 2 张</b><p>纯 CSS 吸附</p></section>
  <section class="card"><b>第 3 张</b><p>零依赖</p></section>
</div>
.carousel {
  overflow-x: auto;                 /* 横向滚动容器 */
  scroll-snap-type: x mandatory;    /* 强制吸附;proximity 为就近吸附 */
  scrollbar-width: none;            /* 隐藏滚动条,保持视觉干净 */
  display: flex;
  gap: 16px;
}
.card {
  flex: 0 0 248px;
  scroll-snap-align: start;         /* 吸附对齐点:卡片左缘 */
  border-radius: 16px;
  padding: 22px;
  background: linear-gradient(150deg, #6c8cff, #a96cff);
  color: #fff;
}
// 箭头导航:按固定步长(卡片宽 + 间距)滚动
const view = document.getElementById('carousel');
const STEP = 264;
document.getElementById('next').addEventListener('click', () => {
  view.scrollTo({ left: view.scrollLeft + STEP, behavior: 'smooth' });
});
// 圆点指示:滚动时用 rAF 节流计算当前卡片序号
view.addEventListener('scroll', () => {
  requestAnimationFrame(() => {
    const idx = Math.round(view.scrollLeft / STEP);
    dots.forEach((d, i) => d.classList.toggle('is-active', i === idx));
  });
});

参数说明

参数位置说明
吸附模式scroll-snap-typex mandatory 强制吸附,x proximity 仅在接近时吸附
吸附对齐点scroll-snap-alignstart/center/end,决定卡片停靠位置
卡片宽度flex: 0 0 248px需与 JS 步长常量保持一致
自动轮播间隔setInterval 参数演示中 1500-6000ms 可调
吸附步长STEP 常量卡片宽 + 间距,箭头导航按此滚动

兼容性与性能

常见问题

Q: 为什么卡片没有吸附效果? 常见原因是父级容器未设 overflow-x: auto,或吸附属性写在了卡片而非容器上。请确认 scroll-snap-type 在滚动容器上、scroll-snap-align 在子卡片上,且卡片不是 position: fixed。

Q: mandatory 和 proximity 怎么选? 浏览器的相册、轮播场景用 mandatory 体验更干脆;内容较长、需要中途停留阅读时用 proximity 更宽松,不会强迫手指「贴边」。

Q: 自动轮播在移动端卡顿或跳帧? 自动轮播走 scrollTo({ behavior: 'smooth' }),滚动由浏览器接管,通常不卡。若在低端机出现丢帧,可适当加大轮播间隔,或改用 behavior: 'auto' 配合 CSS scroll-behavior: smooth。

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(缓动曲线)等属性即可,代码中有注释说明。

✍️ 作者与审核