vue版本3.0
element-plus版本:2.0.2
el-image组件有一个preview-src-list,可以实现轮播图的效果,非常酷,但是在我的项目中,代码如下:
<el-table-column label="图片">
<template #default="{row}">
<el-image :preview-src-list="srcList" style="width:70px;" fit="cover" :src="row.url">
</el-image>
</template>
</el-table-column>
完全按照官方代码写的,但是会出现破层,eltable的内容会部分覆盖轮播图,如下图:
这就非常丑陋了,完全不可行啊,尝试了各种方法,始终不能解决,不知道是element的bug,还是我程序的bug,最后再次翻阅官方文档看到el-image组件下,有这样一个属性ImageViewer 属性
看一下说明,这不就是轮播图吗?是可以自定义轮播图组件吗?官网文档也没有这个组件的具体说明,只能自己摸索了。(截至于发文时间即2022-14-19,官方文档仍然没有此组件说明。)
首先修改el-image代码,去掉preview-src-list属性,给image监听click事件,用来触发轮播图,需要传递一个index参数,之后会用到。
<el-table-column label="图片">
<template #default="{row,$index}">
<el-image @click="handleImg($index)" style="width:70px;" fit="cover" :src="row.url">
</el-image>
</template>
</el-table-column>
再添加一个el-image-viewer组件,代码如下,其中属性可以看官方文档,这里就不再重复。
v-if用来控制是否展示,当image触发click事件后,使showViewer=true
<el-image-viewer :infinite="false" :initial-index="initialIndex"
:hide-on-click-modal="true" v-if="showViewer" @close="showViewer=false" :url-list="srcList" />
handleImg方法,就是展示轮播图,并且传递index,使得轮播图从当前点击的图片开始为第一张图片,如果不传递,则会是整个数组的第一个图片。
const handleImg = (index) => {
state.initialIndex = index
state.showViewer = true
}
好了,现在就能正常显示了,如下图: