nuxt.js 组件传入 图片 使用new Swiper 实现 如果图片的宽度比高大 就 使用 宽度为185px 高度为131px 如果高度比宽度大就是用宽度138px 高度202px 并且显示的个数为3个
时间: 2024-03-01 08:55:23 浏览: 241
可以通过在组件的 `mounted` 钩子中使用 `new Swiper` 创建一个新的 `Swiper` 实例,并根据图片的宽高比动态设置每个幻灯片容器的宽高。
具体实现如下:
```vue
<template>
<div class="swiper-container">
<div class="swiper-wrapper">
<div class="swiper-slide" v-for="(item, index) in images" :key="index">
<img :src="item.src" alt="image" />
</div>
</div>
<div class="swiper-pagination"></div>
</div>
</template>
<script>
import Swiper from 'swiper'
export default {
props: {
images: {
type: Array,
required: true
}
},
mounted() {
const swiper = new Swiper('.swiper-container', {
slidesPerView: 3,
slidesPerGroup: 3,
pagination: {
el: '.swiper-pagination'
}
})
this.$nextTick(() => {
const slides = this.$el.querySelectorAll('.swiper-slide')
slides.forEach(slide => {
const img = slide.querySelector('img')
const width = img.naturalWidth
const height = img.naturalHeight
if (width > height) {
slide.style.width = '185px'
slide.style.height = '131px'
} else {
slide.style.width = '138px'
slide.style.height = '202px'
}
})
swiper.update()
})
}
}
</script>
<style>
.swiper-slide {
display: flex;
align-items: center;
justify-content: center;
margin-right: 10px;
}
</style>
```
在 `mounted` 钩子中,首先创建一个新的 `Swiper` 实例,设置每个视窗中显示的幻灯片数量为 3,分组显示的幻灯片数量也为 3,并将分页器添加到幻灯片容器中。
接着,在 `nextTick` 中获取所有幻灯片容器,并遍历每个容器中的图片,根据图片的宽高比动态设置容器的宽高。
最后,调用 `swiper.update()` 方法更新 `Swiper` 实例,使其重新计算尺寸和位置。
需要注意的是,在使用 `nextTick` 更新幻灯片容器的宽高后,需要手动调用 `swiper.update()` 方法更新 `Swiper` 实例,否则容器的尺寸不会被更新,导致显示不正确。
阅读全文