vue-awesome-swiper @3.1.3使用,记录一些bug及解决方法

安装

注意版本很重要
vue-awesome-swiper 3.1.3对应swiper4.x
vue-awesome-swiper 4.1.4对应swiper5-6
看文档的时候看清楚!!

我用的是3.1.3
npm install vue-awesome-swiper@3.1.3

引入

<template>
  <div id="home-swiper">
    <swiper ref="homeSwiper" :options="homeSwiperOptions">
	  <swiper-slide>...</swiper-slide>
	  <swiper-slide>...</swiper-slide>
	</swiper>
  </div>	
</template>
import { swiper, swiperSlide } from "vue-awesome-swiper";
import "swiper/dist/css/swiper.css";
export default {
  components: {
    swiper,
    swiperSlide,
  },
}

一个需求:切换slide时要更换app组件的背景

首先要知道当前活跃的swiper-slide是哪个!!
就要拿到活跃的swiper-slide的索引
swiper组件绑定slideChange事件:在当前slide切换到另一个slide时执行

<swiper
  ref="projectSwiper"
  @slideChange="slideChange"
  :options="homeSwiperOptions"
>

可以在此事件中获取swiperrealIndex,我设置了looptrue,如果是activeIndex,它是包含了loop模式复制的slide的
realIndex用vuex保存在state中,在app组件里就能直接拿到了

问题:第一次进入时可以正常切换slide,切换路由之后,再切换回来就不能正常切换slide了

这是因为给swiper-slide内的元素进行了样式的添加修改,所以导致swiper初始化失败
解决:在配置中加上

observer: true,	// 改变swiper的样式或者修改swiper的子元素时,自动初始化swiper
observeParents: true, // 当swiper的祖先元素变化时,swiper更新
observeSlideChildren: true	// 子slide更新时,swiper更新

问题:默认显示的是最后一个swiper-slide

因为配置中设置了slidePerView:auto; ,但是我没设置loopedSlides,看了文档才发现,文档中说当设置了loop:trueslidePerView:auto; 时,loopedSlides也需要配置

我在配置上加上loopedSlides:6,发现还是默认显示了最后一个slide,然后我依次试了5、4、3、2、1,发现设置成1的时候就会默认显示第一个swiper-slide(总共有6个slide),于是我就直接设置成了1

后续:发现这样设置之后点击分页器没问题,但是用鼠标滑动只能滑动到第二个slide,就无法继续滑了

看了一些博客之后发现loopedSlides一般设置成slide的个数,然后我就改成6了
改成6之后,默认显示成最后一个slide这个问题还是得不到解决,网上大部分这类问题都是动态加载swiper的时候会默认显示最后一个slide,解决方法给swiper组件加一个判断v-if="swiperList.length",但是我的数据目前是在data里的静态数据,所以这个解决方法不管用
又回去看文档,发现了一个updated()函数,可以用于更新swiper,就像重新初始化一样

解决:

mounted() {
  this.swiper.update();
},

注意:这里的swiper是要获得swiper组件实例的

computed: {
  swiper() {
    return this.$refs.mySwiper.swiper;
  }
}

目前先这样,后续有什么问题再更新,虽然目前暂时没bug了,但是还是有点懵懵的😢


1.10更新

问题:点击pagination时若不小心拖动也会引起slide切换

具体表现为,点击paginatiion试图切换时,若点击过快,有时候就会形成一种拖动的效果,同样也会触发slide切换,这样的用户体验其实是极差的。

解决方法:
pagination新增类名stop-swiping(并无限制,自定义即可)
在配置中加上:

noSwiping: true,
noSwipingClass: "stop-swiping",
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]:根据提供的引用内容,版本3.1.3是vue-awesome-swiper的一个旧版本。引用\[2\]中提到了如何全局引入vue-awesome-swiper,并且需要引入swiper的CSS文件。引用\[3\]中展示了如何在Vue组件中使用vue-awesome-swiper来实现轮播图。根据您的需求,您想要在切换slide时更换app组件的背景。 为了实现这个需求,您可以在vue-awesome-swiper的slide切换事件中,通过修改app组件的背景样式来实现背景的更换。您可以在Vue组件中监听swiper的slideChange事件,并在事件回调函数中修改app组件的背景样式。 下面是一个示例代码,展示了如何实现这个需求: ```javascript <template> <div id="home-swiper"> <swiper ref="homeSwiper" :options="homeSwiperOptions" @slideChange="handleSlideChange"> <swiper-slide>...</swiper-slide> <swiper-slide>...</swiper-slide> </swiper> </div> </template> <script> import { swiper, swiperSlide } from "vue-awesome-swiper"; import "swiper/dist/css/swiper.css"; export default { components: { swiper, swiperSlide, }, methods: { handleSlideChange() { // 在这里修改app组件的背景样式 // 例如:this.$root.$el.style.background = "red"; }, }, }; </script> ``` 在handleSlideChange方法中,您可以根据需要修改app组件的背景样式。例如,您可以使用`this.$root.$el.style.background`来修改app组件的背景颜色。请根据您的具体需求进行相应的修改。 希望这个示例能够帮助您实现轮播图并更换app组件的背景。如果您有任何其他问题,请随时提问。 #### 引用[.reference_title] - *1* [【npm install vue-awesome-swiper@3.1.3 -S 】下载成功但是vue-awesome-swiper 用不了](https://blog.csdn.net/Sonnenlicht77/article/details/126951340)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [关于swiper的两种用法(swiper@4.0.7 vue-awesome-swiper@3.1.3)](https://blog.csdn.net/weixin_52259399/article/details/129066576)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [vue-awesome-swiper @3.1.3使用记录一些bug解决方法](https://blog.csdn.net/gegegegege12/article/details/121387965)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值