<template> <div> <el-alert effect="dark" :closable="false" title="抽取于 Element 的图片预览组件进行改造,实现函数式调用组件,无需基于图片进行点击预览。" type="info" style="margin-bottom: 20px;" /> <el-alert effect="dark" :closable="false" title="有底图预览。" type="info" style="margin-bottom: 20px;" /> <div class="img-wrap"> <div v-for="(item, $index) in imgList" :key="item" class="img-item" @click="showHasImg($index)" > <img :src="item" alt=""> </div> </div> <el-alert effect="dark" :closable="false" title="无底图预览。" type="info" style="margin-bottom: 20px; margin-top: 20px;" /> <el-button type="primary" @click="showNoImg">点击预览</el-button> <el-alert effect="dark" :closable="false" title="点击事件,包含图片点击事件以及关闭事件。。" type="info" style="margin-bottom: 20px; margin-top: 20px;" /> <el-button type="primary" @click="showImg">点击预览</el-button> </div> </template> <script lang="ts"> import { defineComponent, ref } from 'vue' import { createImgPreview } from '_c/Preview/functional' import { Message } from '_c/Message' export default defineComponent({ // name: 'PreviewDemo', setup() { const imgList = ref<string[]>([ 'http://dn-p-tystore.qbox.me/p/chapter/attachment/e_bTeg-weA/EgfWEtftEBfs4BfuEg6uelu_JHH3HUD6I7HMet148BDq5uyiKgem4C2.jpg', 'http://www.jf258.com/uploads/2014-09-29/012939994.jpg', 'http://pic1.win4000.com/wallpaper/3/58f4672ad3c5c.jpg' ]) function showHasImg(i: number): void { createImgPreview({ imageList: [ imgList.value[i] ], show: true, index: 0 }) } function showNoImg():void { createImgPreview({ imageList: imgList.value, show: true, index: 0 }) } function showImg():void { createImgPreview({ imageList: imgList.value, show: true, index: 0, onSelect: (i: number) => { Message.info('当前点击的图片索引:' + i) }, onClose: (i: number) => { Message.info('关闭之后的图片索引:' + i) } }) } return { imgList, showHasImg, showNoImg, showImg } } }) </script> <style lang="less" scoped> .img-wrap { display: flex; justify-content: center; .img-item { width: 400px; height: 300px; overflow: hidden; position: relative; margin: 0 10px; cursor: pointer; img { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } } } </style>