赞
踩
uniapp中swiper组件默认并不支持内容自适应高度,这在展示不同尺寸的图片时可能会导致显示问题。本文将介绍如何使用Vue3的组合式API(Composition API)来实现swiper组件的自动高度功能。
自动高度?父元素使用 height:auto不就行了
虽然将高度设置为 auto 在某些场景下是可行的,但需要注意的是,在移动应用开发中,滑动视图通常需要一个明确的高度来确保滑动效果的正常运作。
<template>
<view class="top_swiper">
<swiper @change="onSwiperChange" class="swiper" :style="{ height: swiperHeight }" circular indicator-dots="true" :autoplay="true" interval="2000" duration="500">
<block v-for="(item, index) in bannerList" :key="item.id">
<swiper-item>
<image class="top_swiper_img" :src="item.image" alt="" mode="widthFix" @load="imageLoaded(index, $event)" />
</swiper-item>
</block>
</swiper>
</view>
</template>
<script setup> import { ref, onMounted, nextTick } from 'vue'; import { post } from '../../libs/request.js' const bannerList = ref([]) const swiperHeight = ref('300rpx'); const imageHeights = ref([]); // 存储图片的高度 onMounted(() => { getBanner(); }) /** * 图片加载完成 */ const imageLoaded = (index, event) => { const { width, height } = event.detail; let actualHeight = height / (width / 750); imageHeights.value[index] = actualHeight; if (index === 0) { swiperHeight.value = actualHeight + 'rpx'; } } /** * swiper 切换 */ const onSwiperChange = async (e) => { const index = e.detail.current; await nextTick(); const currentImageHeight = imageHeights.value[index]; swiperHeight.value = currentImageHeight + 'rpx'; } /** * 获取轮播图 */ const getBanner = () => { post("Banner/getList", {}).then((result) => { if (result.code == 0) { bannerList.value = result.data; } }) } </script>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。