<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
外面就是正常的。
这是什么原因造成的?如何解决呢?
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 。解决方法也很简单:
lazy
属性,因为这里没啥用,el-carousel
默认渲染了全部的el-carousel-item
,没起到懒加载的作用。el-carousel
当前的索引,动态的设置el-image
的src 或者 lazy属性。