在vue引入swiper后,使用loop循环,然后给每个swiper-slide滑块绑定事件@click='fn()' ,由于是循环模式,swiper会复制两份swiper-slide滑块做循环的效果,但是这两份复制的滑块点击效果无效,其它的正常
在created 接受数据,然后$nextTick(function(){做swiper初始化}),
在vue引入swiper后,使用loop循环,然后给每个swiper-slide滑块绑定事件@click='fn()' ,由于是循环模式,swiper会复制两份swiper-slide滑块做循环的效果,但是这两份复制的滑块点击效果无效,其它的正常
在created 接受数据,然后$nextTick(function(){做swiper初始化}),
<template>
<swiper :options="swiper_option" ref="mySwiper">
<swiper-slide v-for="(item,i) in data" :key="item.id" :data_index="i">
<div class="img-card"><img :src="item.ad_img" :alt="item.ad_img"></div>
</swiper-slide>
</swiper>
</template>
<script>
export default {
data() {
return {
data: Array,
swiper_option:Object,
};
},
computed: {
swiper() {
return this.$refs.mySwiper.swiper;
}
},
mounted() {
let _this = this;
this.swiper.on('tap', function () {
//通过this.clickedSlide.getAttribute('data_index'),获取循环数组data的项数
_this.toSonControl(_this.data[this.clickedSlide.getAttribute('data_index')]);//调用你自定义的方法
})
},
methods: {
toSonControl(ad_info) {
巴拉巴拉巴拉巴拉
}
},
}
</script>
给swiper绑定事件,
使用this.$refs.mySwiper.swiper.activeIndex获取点击的那个slider的index。
<swiper :options="swiperOption" @click.native="doSome()" ref="mySwiper">
var index =(this.$refs.mySwiper.swiper.activeIndex - 1) % length;
data() {
return {
swiperOption: {
loop: true,
on: {
click: () => {
// 开启loop: true之后,点击item获取真实索引值
console.log(this.swiper.clickedSlide.dataset.swiperSlideIndex)
}
}
}
}
}
computed: {
swiper() {
return this.$refs.mySwiper.swiper
}
}
6 回答2.9k 阅读✓ 已解决
6 回答2.3k 阅读
5 回答6.3k 阅读✓ 已解决
2 回答2k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
4 回答2.6k 阅读
2 回答977 阅读✓ 已解决
不知道楼主解决了没有,这里分享下,我的解决方案(已经解决了)。使用了 vue-awesome-swiper(内置的 swiper 用的版本是4.x)。
在 loop 开启的时候,dom 绑定事件是有问题的。因为在loop模式下slides前后会复制若干个slide,从而形成一个环路,但是却不会复制绑定在dom上的click事件。
因此只能使用 swiper 提供的 api 方法进行解决。
在 swiperOption 里,定义一个 click 事件,具体代码如下:
html 代码片段
js 代码片段
希望能帮到你及更多的人?