element 中 el-carousel 与 el-image 的冲突,如何解决?

    <el-carousel height="170px">
      <el-carousel-item>
 
        <el-image style="width: 100px; height: 130px" lazy  src=".."  /> 
 
      </el-carousel-item>
    </el-carousel>


    "element-ui": "^2.15.10",
    "vue": "^2.6.11",

el-image 使用 lazy 会无法正常显示, 在 el-carousel外面就是正常的。

这是什么原因造成的?如何解决呢?

阅读 2.6k
avatarAI BotBETA

由于el-carousel内部会根据项目数进行懒加载,因此在el-carousel内部使用lazy会导致图片无法加载。解决这个问题的方法是将el-imagelazy属性去掉,并设置fit="contain"来保证图片在容器内居中显示。同时,为了让图片高度与el-carousel一致,需要将el-image的高度设置为100%。以下是修改后的代码示例:

<el-carousel height="170px">
  <el-carousel-item>
    <el-image style="width: 100%; height: 100%" fit="contain" src=".." />
  </el-carousel-item>
</el-carousel>

这样,图片就能在el-carousel内部正常显示了。

1 个回答

el-image 的懒加载是有条件的:存在属性 overflow: auto; 或者 scroll 的父级元素,且通过滚动时间触发。

el-carousel 中使用有问题,是 element-ui 的问题,他在判断是否需要加载时,是通过 isInContainer 方法。这个方法在获取 display: none; 元素下的元素位置数据时 ,是通过 getBoundingClientRect() 方法获取,这是全部位置数据为 0 。所以这里判断出了问题:https://github.com/ElemeFE/element/blob/290e68ea6aa6c56b7d83182b650e3be4f77ff1b0/packages/image/src/main.vue#L167

解决方法也很简单:

  • 方案1:不使用 lazy 属性,因为这里没啥用,el-carousel 默认渲染了全部的 el-carousel-item,没起到懒加载的作用。
  • 方案2:监听 el-carousel 当前的索引,动态的设置 el-image 的src 或者 lazy属性。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题