vue项目开发记录1:为v-html内的img元素添加点击放大效果

本文主要是介绍vue项目开发记录1:为v-html内的img元素添加点击放大效果,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

项目需求:在页面上显示帖子,帖子内的数据来源于后端,形式是"<p>内容</p>"这样的字符串。其中,要为所有的img元素添加一个点击之后看全图的功能,研究了一下,实现方案如下。

1. 基础内容,实现了帖子的显示
<template><div><div v-for="post in posts" :id="post.id"><p>{{ post.author }}</p><p>{{ post.create_time }}</p><div class="content" v-html="post.content"></div></div></div>
</template>
<script setup>
import { ref, onMounted } from 'vue';
import { getPost } from '@/api/index";const posts = ref([])
onMounted(() => {getData();
})
const getData = () => {getPost().then((res) => {posts.value = res.data;}).catch(err => {});
}
</script>
<style scoped>
.content >>> img {max-width: 500px;
}
</style>
2. 在finally中获取dom节点

由于要为img元素添加点击事件,起初我的想法是,用replaceAll函数手动给img添加@click或onclick事件,将字符串变成<img οnclick="test" src="/pictures/01.png" />这样的形式,后来发现不行,添加@click浏览器无法识别,添加onclick,浏览器也无法获取写在vue文件中的test函数,必须要对dom节点进行操作。

网上的写法都是在onMounted中通过ref获取对应节点,但是因为项目逻辑是在onMounted中调用api接口访问后端,所以必须要等到数据回来之后再去访问节点,才能获取对应的内容。

这时候就可以用到finally。在异步操作中,then, catch, finally是一组,finally内的内容在then和catch执行后执行,非常符合当前的场景。

const getData = () => {getPost().then((res) => {posts.value = res.data;}).catch(err => {console.log(err);}).finally(() => {const elements = document.querySelectorAll('.content img'); // 获取所有img节点elements.forEach(item => item.addEventListener('click', handleClick);});
}
3. 添加弹窗

本来想使用ant-design中的Modal实现图片放大后的弹窗,但是默认的样式和需求差得太远,所以自己写了个。其中还有个小插曲,因为这个组件外部还有内容,所以将.modal_mask的样式写为position:absolute;的时候,并没有达到全屏的效果,只是占满了外部组件的全部,所以要写成position:fixed;

<template><div>...<div v-show="showModal" class="modal_mask"><div class="close_btn" @click="showModal=false"><img src="@/assets/pictures/close.png" /></div><img :src="imgsrc" /></div>
</template>
<script setup>
...const showModal = ref(false); //控制弹窗显示隐藏
const imgsrc = ref('');
...
const handleClick = (event) => {showModal.value = true;imgsrc.value = event.target.src; //必须要通过传来的event获取图片src
}
</script>
<style scoped>
.modal_mask {position: fixed;left: 0;right: 0;top: 0;bottom: 0;background-color: rgba(0, 0, 0, 0.45);z-index: 9999;display: flex;align-items: center;justify-content: center;
}
.modal_mask .close_btn {position: absolute;right: 10px;top: 10px;cursor: pointer;
}
.modal_mask img {max-width: 100%;max-height: 100%;
}
</style>

这篇关于vue项目开发记录1:为v-html内的img元素添加点击放大效果的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1092365

相关文章

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

怎么用idea创建一个SpringBoot项目

《怎么用idea创建一个SpringBoot项目》本文介绍了在IDEA中创建SpringBoot项目的步骤,包括环境准备(JDK1.8+、Maven3.2.5+)、使用SpringInitializr... 目录如何在idea中创建一个SpringBoot项目环境准备1.1打开IDEA,点击New新建一个项

HTML中meta标签的常见使用案例(示例详解)

《HTML中meta标签的常见使用案例(示例详解)》HTMLmeta标签用于提供文档元数据,涵盖字符编码、SEO优化、社交媒体集成、移动设备适配、浏览器控制及安全隐私设置,优化页面显示与搜索引擎索引... 目录html中meta标签的常见使用案例一、基础功能二、搜索引擎优化(seo)三、社交媒体集成四、移动