当前位置: 首页 > ops >正文

vue3文本超出三行显示省略号,点击查看更多显示全部文本

 

只有一行时(不显示展开按钮):

 

话不多说,上码 

~template 

  <el-col :span="24"><el-form-item :label="$t('warningOrgNames_')"><div class="content-box" ref="contanierRef"><div ref="contentRef" id="content" :class="isExpanded ? 'text-expanded' : 'text-ellipsis'">{{ form.informInstitution }}</div><div class="show-more" v-if="shouldShowMore" @click="showMore">{{isExpanded ? '收起' : '查看更多'}}</div></div></el-form-item></el-col>

~js 

import { ref, reactive, watch, nextTick } from "vue";const contentRef = ref(null);const isExpanded = ref(false);  // 默认不展开const shouldShowMore = ref(false); // 是否显示查看更多按钮const contentMaxHeight = ref(0);  // 内容的最大高度// 查看更多按钮逻辑const showMore = () => {isExpanded.value = !isExpanded.value;};// 检查元素是否溢出 - 注意,这里不能在onMounted函数进行(会在父组件先组件挂载),还拿不到弹窗里的节点const checkOverflow = async() => {await nextTick();if (contentRef.value) {// 元素内部所有滚动内容的总高度const contentHeight = contentRef.value.scrollHeight;// 计算行高const lineHeight = parseInt(window.getComputedStyle(contentRef.value).lineHeight);const maxLines = 3;// 3行的行高contentMaxHeight.value = lineHeight * maxLines;shouldShowMore.value = contentHeight > contentMaxHeight.value;}
};// 打开弹窗 -- 可通过接收参数data来展示父组件的数据
const openDialog = async (row, data, requestFn) => {visible.value = true;try {...// 需要在打开弹窗获取到数据时才检查文本高度
++      checkOverflow()}...
}// 点击查看更多/收起按钮时也触发检查一下文本高度
++ watch(isExpanded, (val) => {
++   checkOverflow();
++ })// 关闭
const handleCancel = () => {...// 关闭按钮时重置一下展开按钮
++  isExpanded.value = false;visible.value = false;
};

~style

.content-box {position: relative;
}
.text-ellipsis {display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 3; /* 限制文本显示为3行 */line-height: 2.5;overflow: hidden;
}
.show-more {position: absolute;color: #409EFF;cursor: pointer;right: 0;bottom: -20px;
}
.text-expanded {-webkit-line-clamp: unset; /* 取消限制 */
}

由于这是封装后的组件,不能在onMounted函数判断元素是否溢出,要在打开弹窗获取到数据时才调用checkOverflow()

http://www.xdnf.cn/news/8951.html

相关文章:

  • 东北某汽车集团云建设:如何用监控易护航云平台系统?
  • Nginx 安全防护与 HTTPS 部署实战笔记
  • Android 之 kotlin 语言学习笔记一
  • 企业级调度器LVS (面试版)
  • 项目:聊天室小项目
  • day37 python早停策略和模型权重的保存
  • PSNR指标Pytorch实现
  • Spring IoC(1)
  • 论文分享之Prompt优化
  • sass三大循环语法
  • 策略模式与责任链模式学习笔记:从入门到理解
  • ROS架构
  • OpenCV图像认知(二)
  • Docker系列(四):容器操作全栈指南 —— 从入门到生产级管控
  • 三大微调技术对比:Prompt/Prefix/P-Tuning
  • C++ : list
  • TDengine 中集群维护
  • 基于开源链动2+1模式AI智能名片S2B2C商城小程序的产品驱动型增长策略研究
  • 猿大师办公助手网页编辑Office/wps支持服务器文件多线程下载吗?
  • 技术文档写作方法——以MATLAB滤波为例
  • 仓储物流场景下国标GB28181视频平台EasyGBS视频实时监控系统应用解决方案
  • Webtrees 手册/程序概述
  • 组态王KingSCADA3.53连接S7-1200PLC实战教程
  • Nginx 基本概念深度解析:从服务器特性到代理模式应用​
  • 亚当·斯密思想精髓的数学建模与形式化表征
  • 《软件工程》第 15 章 - 软件度量与估算:从概念到实践​
  • 离线安装Microsoft 照片【笔记】
  • Language Model
  • Vue-01(Vue CLI创建项目以及文件配置说明)
  • 爬虫学习-Scrape Center spa2 超简单 JS 逆向