前言
隨著版本的更新Element UI
新增了新的組件,例如:Image预烙,這是官方文檔中有寫的
但我的需求并不是展示圖片后再點(diǎn)擊圖片打開大圖瀏覽,需求可能是一個文字道媚,點(diǎn)擊后查看大圖扁掸,但又不想引入其他npm插件,例如這樣:
食用方法
通過翻看Image組件源碼最域,
地址:https://github.com/ElemeFE/element/blob/dev/packages/image/src/main.vue
發(fā)現(xiàn)大圖預(yù)覽是一個小組件el-image-viewer:
在打開看看el-image-viewer小組件源碼的props谴分,
地址:https://github.com/ElemeFE/element/blob/dev/packages/image/src/image-viewer.vue
發(fā)現(xiàn)如下:
props: {
urlList: {
type: Array,
default: () => []
},
zIndex: {
type: Number,
default: 2000
},
onSwitch: {
type: Function,
default: () => {}
},
onClose: {
type: Function,
default: () => {}
},
initialIndex: {
type: Number,
default: 0
}
}
從字面意思不難理解它綁定參數(shù)的含義,
urlList 綁定的文件列表
zIndex 查看器層級
onSwitch 圖片切換事件
onClose 查看器關(guān)閉事件
initialIndex 初始化展示哪張圖片
這里我們只需要使用到的就只有urlList與onClose兩個屬性 镀脂,一個用來放圖片鏈接一個用來關(guān)閉查看器牺蹄。
需要使用的屬性我們知道了,然后我們就在代碼里面引入image-viewer就可以直接使用薄翅。
<template>
<div>
<el-button @click="onPreview">預(yù)覽</el-button>
<el-image-viewer v-if="showViewer" :on-close="closeViewer" :url-list="[url]" />
</div>
</template>
<script>
// 導(dǎo)入組件
import ElImageViewer from 'element-ui/packages/image/src/image-viewer'
export default {
name: 'Index',
components: { ElImageViewer },
data() {
return {
showViewer: false, // 顯示查看器
url:'https://cube.elemecdn.com/6/94/4d3ea53c084bad6931a56d5158a48jpeg.jpeg'
}
},
methods: {
onPreview() {
this.showViewer = true
},
// 關(guān)閉查看器
closeViewer() {
this.showViewer = false
}
}
</script>
值得注意的是沙兰,如果el-image-viewer組件在el-dialog里面,el-dialog的層級是優(yōu)先的翘魄,因此我們需要屬性z-index去更改el-image-viewer組件樣式的層級:
<!-- 圖片查看器 -->
<el-image-viewer v-if="showViewer" :on-close="closeViewer" :url-list="[url]" index="9999"/>
補(bǔ)充:
以上方法不兼容IE6μ臁!暑竟!因?yàn)閑lement沒有將此組件暴露出去并經(jīng)過webpack打包斋射,直接引入該組件的話IE有兼容性問題,大多數(shù)網(wǎng)上的都是上面的方法但荤。
這里我們利用已經(jīng)暴露的Image組件包含的el-image-viewer來重新實(shí)現(xiàn)我們的目的罗岖,它由于暴露出來并經(jīng)過webpack打包編譯
因此以下方法是兼容IE的(推薦使用此方法,也無須再引入任何組件8乖辍):
<template>
<div>
<el-button @click="onPreview">預(yù)覽</el-button>
<!-- 圖片查看器(兼容ie) -->
<el-image
ref="preview"
class="hideImgDiv"
:src="url"
:preview-src-list="[url]"
z-index="9999"
></el-image>
</div>
</template>
<script>
export default {
name: 'Index',
data() {
return {
url:'https://cube.elemecdn.com/6/94/4d3ea53c084bad6931a56d5158a48jpeg.jpeg'
}
},
methods: {
onPreview() {
//調(diào)用image組件中的大圖瀏覽圖片方法
this.$refs.preview.clickHandler();
},
}
</script>
css:
/*隱藏el-image圖片組件中不需要展示的的img標(biāo)簽*/
.hideImgDiv {
/deep/ .el-image__inner {
display: none;
}
}