
在 swiper 10 中实现无缝滚动 marquee 效果时,即使设置了 disableoninteraction: false,点击含链接的 slide 仍可能中断 autoplay —— 根本原因在于 freemode: true 与 autoplay 冲突,禁用该选项即可恢复自动播放连续性。
Swiper 的 freeMode 模式允许用户自由拖拽滑块(类似惯性滚动),但其内部机制会主动监听并响应所有交互事件(包括鼠标点击、触摸、焦点等),即使显式设置 disableOnInteraction: false,freeMode 仍会强制暂停 autoplay。这是 Swiper 10 的设计行为,并非配置遗漏。
✅ 正确解法:彻底移除 freeMode: true
freeMode 在纯自动轮播(marquee)场景中不仅非必需,反而是干扰源。你的需求是「匀速、不间断、可点击」的横向流动效果,完全可通过 autoplay + speed + allowTouchMove: false 组合实现:
const swiperContainer = document.querySelector('.swiper');
const swiper = new Swiper(swiperContainer, {
autoHeight: true,
slidesPerView: 3,
loop: true,
loopSlides: 6,
autoplay: {
delay: 1, // 极小延迟确保流畅(单位:ms)
disableOnInteraction: false, // ✅ 显式关闭交互暂停
pauseOnMouseEnter: false // 额外建议:悬停也不暂停
},
speed: 6000, // 总体滚动周期(ms),越长越慢
allowTouchMove: false, // 禁用拖拽,避免意外中断
// ⚠️ 移除了 freeMode: true —— 这是关键!
});? 同时,CSS 需保持线性过渡以匹配 marquee 节奏:
.swiper-wrapper {
transition-timing-function: linear !important;
}
.swiper-slide {
height: 200px;
width: 200px;
}? 补充优化建议:
- 若需更精细控制滚动节奏,可结合 slidesPerGroup: 1 和 spaceBetween 调整视觉密度;
- 点击链接时,浏览器默认行为(新标签页跳转)不会影响 Swiper 实例,无需额外处理;
- 如后续需支持键盘导航或 ARIA 可访问性,建议为 .swiper-slide 添加 tabindex="0" 并监听 keydown 事件(但不影响 autoplay)。
总结:freeMode 与 autoplay 在 Swiper 10 中存在底层逻辑冲突,禁用 freeMode 是解决“点击即停”问题的最简、最可靠方案。专注使用 autoplay 的原生能力,配合 CSS 线性动画,即可构建稳定、高性能的 marquee 效果。










