Fondo: para el contenido presentado por v-html, las imágenes que contiene no se pueden manipular directamente, pero en algunos casos es necesario acercar y obtener una vista previa de las imágenes.
Solución: agregue el método de clic (getImg) al elemento principal del contenido renderizado, y la ruta de la imagen se puede obtener cuando se hace clic en la imagen; luego obtenga una vista previa a través del complemento de vista previa;
1. Obtenga la ruta de la imagen:
parte HTML:
<div @click="getImg($event)"> //在父元素上加上click方法
<div v-html="currentItem.content"></div> //用v-html渲染内容
</div>
Parte JS:
//此处用的vue3
<script setup>
const getImg = ($event) => {
console.log($event.target.currentSrc) //当前点击的图片的路径
}
</script>
2. Vista previa de la imagen, aquí está el componente el-image-viewer en vue:
parte HTML:
//hide-on-click-modal 禁止点击空白区域来关闭弹窗
//@close="()=>{showViewer = false}" 预览弹窗关闭时的回调事件
//:url-list="previewList" 预览图片的路径,previewList为数组
<div class="demo-image__preview">
<el-image-viewer hide-on-click-modal @close="()=>{showViewer = false}" v-if="showViewer" :url-list="previewList" />
</div>
Parte JS:
<script setup>
import {ref} from 'vue'
const showViewer = ref(false);
const previewList = ref([]);
const getImg = ($event) => {
previewList.value = [$event.target.currentSrc];
showViewer.value = true;
}
</script>
3. Código completo:
<template>
<div class="container">
<div class="demo-image__preview">
<el-image-viewer hide-on-click-modal @close="()=>{showViewer = false}" v-if="showViewer" :url-list="previewList" />
</div>
<div @click="getImg($event)">
<div class="detailContent" v-html="currentItem.content"></div>
</div>
</div>
</template>
<script setup>
import {ref} from 'vue'
const showViewer = ref(false);
const previewList = ref([]);
const getImg = ($event) => {
previewList.value = [$event.target.currentSrc];
showViewer.value = true;
}
</script>