Swiper.js 实现淡入淡出(Fade)切换效果的正确配置方法

12次阅读

Swiper.js 实现淡入淡出(Fade)切换效果的正确配置方法

swiper 9+ 版本中启用 fade 效果必须显式导入并注册 `effectfade` 模块,否则即使设置了 `effect: “fade”`,滑块仍会回退为默认的 slide 滚动效果。

在 Swiper 9 及更高版本(包括你使用的 9.4.1 和 10.0.4)中,所有高级功能(如 fade、cube、flip 等切换效果)均已模块化,不再默认内置。这意味着仅设置 effect: “fade” 是无效的——Swiper 根本不会识别该效果,从而静默降级为默认的 slide 行为。

✅ 正确做法是:

  1. 显式导入 EffectFade 模块;
  2. 将其传入 modules 数组选项中;
  3. 保持 effect: “fade” 配置不变。

以下是修复后的完整代码示例(适配 laravel Blade + vite 环境):

import Swiper from 'swiper'; import { EffectFade } from 'swiper/modules';  const options = {   modules: [EffectFade], // ✅ 关键:必须注册 EffectFade 模块   slidesPerView: 1,   effect: 'fade',        // ✅ 保留 fade 效果声明   spaceBetween: 16,   speed: 300,   loop: true,   allowTouchMove: false, // 可选:禁用触摸拖拽,强化 fade 的“翻页感”   // ⚠️ 注意:fade 模式下 spaceBetween 无效(无间距概念),可移除或忽略 };  const slider_1 = new Swiper('#best-sellers-slider-1', options); const slider_2 = new Swiper('#best-sellers-slider-2', options); const slider_3 = new Swiper('#best-sellers-slider-3', options);  const nextButton = document.querySelector('#best-seller-next'); const prevButton = document.querySelector('#best-seller-prev');  nextButton?.addEventListener('click', () => {   slider_1.slideNext();   slider_2.slideNext();   slider_3.slideNext(); });  prevButton?.addEventListener('click', () => {   slider_1.slidePrev();   slider_2.slidePrev();   slider_3.slidePrev(); });

? 重要注意事项

  • spaceBetween 在 fade 模式下不生效(因为 fade 是全屏层叠切换,无物理间距),建议移除以避免误解;
  • 若使用 Swiper 10+,API 保持一致,但需确认安装的是 swiper@10 包(Vite 中建议使用 npm install swiper@10);
  • 所有模块化插件(如 Navigation、Pagination、Autoplay)均需同理显式导入并注册到 modules 数组中;
  • 推荐为 dom 元素添加空值防护(如 nextButton?.addEventListener(…)),提升生产环境健壮性。

完成上述配置后,三个同步滑块将真正以淡入淡出方式切换,视觉上呈现平滑的透明度过渡效果,而非生硬的左右滚动。

text=ZqhQzanResources