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

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()

相关文章:

  • AI日报 - 2025年05月26日
  • Android开发namespace奇葩bug
  • 基于SpringBoot+RabbitMQ完成应用通信
  • Hadoop集群部署
  • 如何解决大模型返回的JSON数据前后加上```的情况
  • OpenGL Chan视频学习-7 Writing a Shader inOpenGL
  • 使用队列实现栈和使用栈实现队列
  • vue + ant-design + xlsx 实现表格导出进度提示功能
  • 牛客round94E
  • vue3 数值计算 保留小数位
  • 嵌入式学习之系统编程(五)进程(2)
  • day8补充(中断驱动和队列缓冲实现高效数据处理)
  • 文件管理(第八章、九)
  • PDF处理控件Aspose.PDF教程:以编程方式合并PDF文档
  • 一文带你彻底理清C 语言核心知识 与 面试高频考点:从栈溢出到指针 全面解析 附带笔者手写2.4k行代码加注释
  • DP KVM 为何更难实现 EDID 模拟器?
  • day38python打卡
  • 主流Agent Memory工具or框架对比(Mem0、LangMem、Letta)
  • 若依框架中返回自定义实体类分页数据和总记录数的实现方法
  • 【鸿蒙开发】Hi3861学习笔记-雨滴传感器
  • 三鼎网络网站建设/软文营销经典案例
  • 网站做ppt模板下载/东莞做网站最好的是哪家
  • 网站恶意刷/外包网络推广营销
  • vs2013 网站建设/名风seo软件
  • 像优酷平台网站是怎么做的/营销型网站建设应该考虑哪些因素
  • 做网站靠教育赚钱/关键词优化公司靠谱推荐