elementUI轮播图组件el-carousel适配移动端大小(图片加载好后根据大小适配)

发布于:2025-06-28 ⋅ 阅读:(17) ⋅ 点赞:(0)

 获取img实例,动态设置el-carousel高度

<template>
  <div class="content main">
    <el-carousel arrow="always" :height="bannerHeight + 'px'">
      <el-carousel-item v-for="(item, index) in banners" :key="index">
        <img
          ref="bannerImg"
          :src="item"
          alt="banner"
          class="banner-img"
          @load="imgLoad"
        />
      </el-carousel-item>
    </el-carousel>
  </div>
</template>

<script setup>
import { ref, onMounted, onBeforeUnmount, nextTick } from 'vue';

const banners = ref([
  '/images/banner/banner1.png',
  '/images/banner/banner1.png',
  '/images/banner/banner1.png',
  '/images/banner/banner1.png'
]);

const bannerHeight = ref(200);
const bannerImg = ref(null);

function imgLoad() {
  nextTick(() => {
    const imgs = bannerImg.value;
    if (Array.isArray(imgs) && imgs.length > 0) {
      bannerHeight.value = imgs[0].clientHeight;
    } else if (imgs && imgs.clientHeight) {
      bannerHeight.value = imgs.clientHeight;
    }
  });
}

onMounted(() => {
  imgLoad();
  window.addEventListener('resize', imgLoad);
});

onBeforeUnmount(() => {
  window.removeEventListener('resize', imgLoad);
});
</script>

<style scoped>
.content {
  margin: 16px auto;
}

.banner-img {
  width: 100%;
  height: auto;
  object-fit: cover;
}

/* 移动设备样式 */
@media screen and (max-width: 768px) {
  .content {
    margin: 0 auto;
    overflow: hidden;
    padding: 8px;
  }

  .banner-img {
    border-radius: 8px;
  }
}
</style>


网站公告

今日签到

点亮在社区的每一天
去签到