swiper使用踩坑记录

1.类名不一致问题。

  • 问题描述:在Swiper初始化时,如果Swiper初始化函数中的参数swiperContainer与自定义swiper容器名不一致,Swiper实例初始化不成功。
  • 解决方案:swiperContainer与标签中自定义的容器类名一致。例如:
// 用于初始化一个Swiper,返回初始化后的Swiper实例。
// swiperContainer:Swiper容器的css选择器,例如".swiper"
new Swiper(swiperContainer, parameters);
// vertical-swiper-container:自定义的swiper容器名
<div class="main vertical-swiper-container"></div>
  • 问题描述:在Swiper初始化时,如果分页器容器或前进/后退按钮的CSS选择器或HTML元素(el)或(nextEl/prevEl)与自定义类名不一致,即使Swiper实例初始化成功,分页器和导航按钮也无法正常工作。
  • 解决方案:确保elnextElprevEl的配置与HTML中的类名或选择器一致。例如:
this.verticalSwiper = new Swiper('.vertical-swiper-container', {
    direction: 'vertical',
    pagination: {
        el: '.vertical-pagination',
        clickable: true
    },
    navigation: {
        nextEl: '.swiper-button-next',
        prevEl: '.swiper-button-prev'
    },
});
// 前进后退按钮,类名唯一
<div class="swiper-button-prev"></div>
<div class="swiper-button-next"></div>
// 分页器,类名唯一
<div class="vertical-pagination"></div>

2.swiper官网给的配置选项在swiper实例初始化成功后即可根据自身需求进行选择配置,而不需要手动编写对应实现逻辑。

3.swiper实例初始化

        ①初始化swiper实例的类名可以自定义,但类名位置放置要正确,即类名对应标签位置需正确;其中若包含导航和分页等配置,则这些配置选项的类名也需要与自定义名称一一对应。

        ②轮播器在进行切换时会自行判断当前页面并更新页面的类名,不需要手动编写或判断页面状态,swiper会根据页面的相邻或不相邻状态自适应地更新对应标签类名

        ③在初始化多个swiper实例时,可能出现只有第一个swiper实例初始化成功的情况,个人的解决方案采用的是,将其余未初始化成功的swiper实例代码置于定时器和this.$nextTick(() => {};方法内部。以初始化两个swiper实例为例:

this.verticalSwiper = new Swiper('.vertical-swiper-container', {
        direction: 'vertical',
        pagination: {
            el: '.vertical-pagination',
            clickable: true
        },
        effect: 'slide',
        on: {
            init: () => {
                console.log('垂直Swiper初始化完成');
                // this.initHorizontalSwipers();
            },
            slideChange: () => {
                console.log('垂直轮播切换到:', this.verticalSwiper.activeIndex);
                this.currentPageIndex = this.verticalSwiper.activeIndex;
                this.updateNavigationButtonState();
                this.checkLazyPicture();
            },
            slideChangeTransitionStart: () => {
                console.log('垂直过渡开始');
                this.duration = 1000;
            },
            slideChangeTransitionEnd: () => {
                console.log('垂直过渡结束');
                this.duration = 0;
            }
        }
});
setTimeout(() => {
        this.$nextTick(() => {
            this.horizontalSwiper = new Swiper('.horizontal-swiper-container', {
                direction: 'horizontal',
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true
                },
                navigation: {
                    nextEl: '.swiper-button-next',
                    prevEl: '.swiper-button-prev'
                },
                mousewheel: {
                    sensitivity: 1,
                    releaseOnEdges: true
                },
                effect: 'slide',
                on: {
                    init: () => {
                        console.log('水平Swiper初始化完成');
                    },
                    slideChange: () => {
                        if (this.horizontalSwiper) {
                            this.horizontalCurrentPageIndex = this.horizontalSwiper.activeIndex;
                        }
                    },
                    slideChangeTransitionStart: () => {
                        console.log('水平过渡开始');
                    },
                    slideChangeTransitionEnd: () => {
                        console.log('水平过渡结束');
                    }
                }
            });
        })
}, 1000);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值