Vue3文本省略(Ellipsis)

APIs

参数说明类型默认值必传
maxWidth文本最大宽度number | string‘100%’false
line最大行数numberundefinedfalse
trigger展开的触发方式‘click’undefinedfalse
tooltip是否启用文本提示框booleantruefalse
tooltipMaxWidth提示框内容最大宽度,单位px,默认不设置时,提示文本内容自动与展示文本宽度保持一致numberundefinedfalse
tooltipFontSize提示文本字体大小,单位px,优先级高于 overlayStylenumber14false
tooltipColor提示文本字体颜色,优先级高于 overlayStylestring‘#FFF’false
tooltipBackgroundColor提示框背景颜色,优先级高于 overlayStylestring‘rgba(0, 0, 0, .85)’false
tooltipOverlayStyle提示框内容区域样式CSSProperties{padding: ‘8px 12px’, textAlign: ‘justify’}false

Events

事件名称说明参数
expand点击文本展开收起时的回调(expand: boolean) => void

效果如下图:在线预览

在这里插入图片描述

创建文本省略组件Ellipsis.vue

其中引入使用了 Vue3文本提示(Tooltip)

<script setup lang="ts">
import Tooltip from '../tooltip'
import { ref, computed, watchEffect, nextTick } from 'vue'
import type { CSSProperties } from 'vue'
interface Props {maxWidth?: number|string // 文本最大宽度line?: number // 最大行数trigger?: 'click' // 展开的触发方式tooltip?: boolean // 是否启用文本提示框// 以下均为 tooltip 组件属性tooltipMaxWidth?: number // 提示框内容最大宽度,单位px,默认不设置时,提示文本内容自动与展示文本宽度保持一致tooltipFontSize?: number // 提示文本字体大小,单位px,优先级高于 overlayStyletooltipColor?: string // 提示文本字体颜色,优先级高于 overlayStyletooltipBackgroundColor?: string // 提示框背景颜色,优先级高于 overlayStyletooltipOverlayStyle?: CSSProperties // 提示框内容区域样式
}
const props = withDefaults(defineProps<Props>(), {maxWidth: '100%',line: undefined,trigger: undefined,tooltip: true,tooltipMaxWidth: undefined,tooltipFontSize: 14,tooltipColor: '#FFF',tooltipBackgroundColor: 'rgba(0, 0, 0, .85)',tooltipOverlayStyle: () => ({padding: '8px 12px', textAlign: 'justify'})
})
const textMaxWidth = computed(() => {if (typeof props.maxWidth === 'number') {return props.maxWidth + 'px'}return props.maxWidth
})
const showTooltip = ref()
const ellipsis = ref()
const defaultTooltipMaxWidth = ref()
watchEffect(() => {showTooltip.value = props.tooltip
})
watchEffect(() => {if (props.tooltip) {if (props.tooltipMaxWidth) {defaultTooltipMaxWidth.value = props.tooltipMaxWidth} else {defaultTooltipMaxWidth.value = ellipsis.value.offsetWidth + 24}}
}, {flush: 'post'})
const emit = defineEmits(['expand'])
function onExpand () {if (ellipsis.value.style['-webkit-line-clamp']) {if (props.tooltip) {showTooltip.value = falsenextTick(() => {ellipsis.value.style['-webkit-line-clamp'] = ''})} else {ellipsis.value.style['-webkit-line-clamp'] = ''}emit('expand', true)} else {if (props.tooltip) {showTooltip.value = true}ellipsis.value.style['-webkit-line-clamp'] = props.lineemit('expand', false)}
}
</script>
<template><Tooltipv-if="showTooltip":max-width="defaultTooltipMaxWidth":fontSize="tooltipFontSize":color="tooltipColor":backgroundColor="tooltipBackgroundColor":overlayStyle="tooltipOverlayStyle"><template #title><slot name="tooltip"><slot></slot></slot></template><divref="ellipsis"class="m-ellipsis":class="[line ? 'ellipsis-line' : 'not-ellipsis-line', {'cursor-pointer': trigger === 'click'}]":style="`-webkit-line-clamp: ${line}; max-width: ${textMaxWidth};`"@click="trigger === 'click' ? onExpand() : () => false"v-bind="$attrs"><slot></slot></div></Tooltip><divv-elseref="ellipsis"class="m-ellipsis":class="[line ? 'ellipsis-line' : 'not-ellipsis-line', {'cursor-pointer': trigger === 'click'}]":style="`-webkit-line-clamp: ${line}; max-width: ${textMaxWidth};`"@click="trigger === 'click' ? onExpand() : () => false"v-bind="$attrs"><slot></slot></div>
</template>
<style lang="less" scoped>
.m-ellipsis {font-size: 14px;line-height: 1.5714285714285714;overflow: hidden;cursor: text;
}
.ellipsis-line {display: -webkit-inline-box;-webkit-box-orient: vertical;
}
.not-ellipsis-line {display: inline-block;vertical-align: bottom;white-space: nowrap;text-overflow: ellipsis;
}
.cursor-pointer {cursor: pointer;
}
</style>

在要使用的页面引入

<template><div><h1>Ellipsis 文本省略</h1><h2 class="mt30 mb10">基本使用</h2><Ellipsis :maxWidth="240">住在我心里孤独的 孤独的海怪 痛苦之王 开始厌倦 深海的光 停滞的海浪</Ellipsis><h2 class="mt30 mb10">多行省略</h2><Ellipsis :line="2">电灯熄灭 物换星移 泥牛入海<br>黑暗好像 一颗巨石 按在胸口<br>独脚大盗百万富翁 摸爬滚打<br>黑暗好像 一颗巨石 按在胸口</Ellipsis><h2 class="mt30 mb10">展开方式</h2><Ellipsis trigger="click" :line="2">电灯熄灭 物换星移 泥牛入海<br>黑暗好像 一颗巨石 按在胸口<br>独脚大盗百万富翁 摸爬滚打<br>黑暗好像 一颗巨石 按在胸口</Ellipsis><h2 class="mt30 mb10">定制 Tooltip 内容</h2><Ellipsis :max-width="240">住在我心里孤独的 孤独的海怪 痛苦之王 开始厌倦 深海的光 停滞的海浪<template #tooltip><div style="text-align: center">《秦皇岛》<br>住在我心里孤独的<br>孤独的海怪 痛苦之王<br>开始厌倦深海的光 停滞的海浪</div></template></Ellipsis></div>
</template>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/20259.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

APUE学习62章终端(二): stty命令特殊字符终端标志

1. stty命令 stty命令的英文解释: 很明显stty有一个-F参数 所以准确的说: stty命令是设置当前终端驱动程序(也有可能直接配置了硬件&#xff0c;这点目前不清楚)的属性&#xff0c;使当前终端的驱动程序能够使能/去使能一些特殊字符的识别与处理等等 2. stty命令的结构 3. 终端…

使用vuex让购物车联动

// 1.vuex点击加减触发函数提交仓库把我们请求的数据存到仓库 2.在仓库定义这个函数和对象 把我们存进去的数据存起来 // 3。在我们需要的页面拿出数据&#xff0c;然后循环就可以 // 4.当我们点击加号就触发函数然后在vuex对这个数据进行处理 // 5.对我们点进来的数据进行一个…

【SLAM】LoFTR知多少

1. LoFTR: Detector-Free Local Feature Matching with Transformers PAPER 论文 | LoFTR: Detector-Free Local Feature Matching with Transformers 代码 | CODE: 关键词 | detector-free, local feature matching LoFTR知多少 1. LoFTR: Detector-Free Local Feature M…

O3DE的Pass

Pass介绍 Pass是具有输入和输出的渲染过程。 在最终渲染帧中看到的每个细节都是通过一系列Pass&#xff08;前一个Pass的输出是下一个Pass的输入&#xff09;计算出来的。Pass可以生成图像&#xff08;作为纹理、缓冲区或渲染目标&#xff09;。每个图像都包含关于场景的特定…

Unity Shader:常用的C#与shader交互的方法

俗话说久病成医&#xff0c;虽然不是专业技术美术&#xff0c;但代码写久了自然会积累一些常用的shader交互方法。零零散散的&#xff0c;总结如下&#xff1a; 1&#xff0c;改变UGUI的材质球属性 有时候我们需要改变ui的一些属性&#xff0c;从而实现想要的效果。通常UGUI上…

Spring如何通过三级缓存解决循环依赖问题?

目录 一、什么是Spring 二、循环依赖问题 三、三级缓存机制 四、如何通过三级缓存解决循环依赖问题 一、什么是Spring Spring框架是一个开源的Java应用程序开发框架&#xff0c;提供了一种全面的、一致的编程模型&#xff0c;用于构建企业级应用程序和服务。它由Rod Johnso…

深度学习(32)——CycleGAN(1)

深度学习&#xff08;32&#xff09;——CycleGAN&#xff08;1&#xff09; 文章目录 深度学习&#xff08;32&#xff09;——CycleGAN&#xff08;1&#xff09;1. GAN原理2. CycleGAN&#xff08;1&#xff09;原理&#xff08;2&#xff09;核心思想&#xff08;3&#xf…

PtahDAO:全球首个DAO治理资产信托计划的金融平台

金融科技是当今世界最具创新力和影响力的领域之一&#xff0c;区块链技术作为金融科技的核心驱动力&#xff0c;正在颠覆传统的金融模式&#xff0c;为全球用户提供更加普惠、便捷、安全的金融服务。在这个变革的浪潮中&#xff0c;PtahDAO&#xff08;普塔道&#xff09;作为全…

【C++】开源:matplotlib-cpp静态图表库配置与使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍matplotlib-cpp图表库配置与使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&…

某行动态cookie反爬虫分析

某行动态cookie反爬虫分析 1. 预览 反爬网址(base64): aHR0cDovL3d3dy5wYmMuZ292LmNu 反爬截图&#xff1a; 需要先加载运行js代码&#xff0c;可能是对环境进行检测&#xff0c;反调试之类的 无限debugger 处理办法 网上大部分人说的都是添加cookie来解决。 那个noscript…

友盟+、GrowingIO和神策数据 对比

对于市面上的数据平台&#xff0c;先简单归个类。 1、移动统计平台&#xff0c;如友盟、talkingdata、百度云统计、腾讯移动应用统计等。 相同点是数据源都是埋点数据。友盟有免费版本。 前端效果&#xff1a;展现形式上为BI报表。 常用操作是页面内点击和筛选。 使用要求…

yolov8-制作数据集,数据集格式转换(yolo格式-voc格式)附完整代码

yolo训练时可使用的数据集格式为yolo格式以及voc格式&#xff0c; voc格式的数据集在训练时需要先转换为yolo格式&#xff0c;然后根据自己的数据集的位置更改yaml配置文件的文件路径即可。基于目前对Yolo系列训练模型的讲解已经很全面&#xff0c;所以本文主要讲解yolo数据集与…

C#中 使用yield return 优化大数组或集合的访问

概要 我们在开发过程中&#xff0c;经常需要在一个很大的数组或集合中搜索元素&#xff0c;以满足业务需求。 本文主要介绍通过使用yield return的方式&#xff0c;避免将大量数据全部加载进入内存&#xff0c;再进行处理。从而提高程序的性能。 设计和实现 基本业务场景&a…

docker安装nginx并配置SSL

1、拉取镜像 docker pull nginx2、启动nginx容器&#xff0c;复制一份默认配置文件出来 // 以nginx镜像为基础镜像创建一个名为nginx01的容器 docker run -d -p 80:80 --name nginx01 nginx创建成功后会看到nginx的欢迎页面 3、挂载nginx目录 拷贝nginx的配置信息到主机目录…

【图论】强连通分量

一.定义 强连通分量&#xff08;Strongly Connected Components&#xff0c;简称SCC&#xff09;是图论中的一个概念&#xff0c;用于描述有向图中的一组顶点&#xff0c;其中任意两个顶点之间都存在一条有向路径。换句话说&#xff0c;对于图中的任意两个顶点u和v&#xff0c;…

Python爬虫—破解JS加密的Cookie

前言 在进行网站数据爬取时&#xff0c;很多网站会使用JS加密来保护Cookie的安全性&#xff0c;而为了防止被网站反爬虫机制识别出来&#xff0c;我们通常需要使用代理IP来隐藏我们的真实IP地址。 本篇文章将介绍如何结合代理IP破解JS加密的Cookie&#xff0c;主要包括以下几个…

银河麒麟V10 QtCreator安装配置说明(断网离线)

文章目录 1.安装要求:2.安装Qt1.安装要求: 拥有Qt软件安装包qt5.12-arm链接:https://pan.baidu.com/s/1FJerT6SckfjABxAn60rsrA?pwd=mfi6 提取码:mfi6 2.安装Qt 1)拷贝Qt软件包qt5.12-arm至系统/home/kylin/桌面 2)安装Qt软件包 cd /home/kylin/qt5.12-arm/桌面 su…

Flutter:gsy_flutter_demo项目学习——布局切换动画、列表滑动监听、列表滑动到指定位置、高斯模糊

前言 gsy_flutter_demo是一个关于各种小案例和小问题的方案解决。项目是由flutter大佬恋猫de小郭维护的 项目地址&#xff1a;https://github.com/CarGuo/gsy_flutter_demo 感兴趣的可以看一下大佬的文章&#xff1a;Flutter完整开发实战详解系列&#xff0c;GSY Flutter 系…

非凸科技受邀参加中科大线上量化分享

7月30日&#xff0c;非凸科技受邀参加由中国科学技术大学管理学院学生会、超级量化共同组织的“打开量化私募的黑箱”线上活动&#xff0c;分享量化前沿以及求职经验&#xff0c;助力同学们拿到心仪的offer。 活动上&#xff0c;非凸科技量化策略负责人陆一洲从多个角度分享了如…

485modbus转profinet网关连三菱变频器modbus通讯触摸屏监控

本案例介绍了如何通过485modbus转profinet网关连接威纶通与三菱变频器进行modbus通讯。485modbus转profinet网关提供了可靠的连接方式&#xff0c;使用户能够轻松地将不同类型的设备连接到同一网络中。通过使用这种网关&#xff0c;用户可以有效地管理和监控设备&#xff0c;从…