结合el-tooltip,实现内容过长省略,移上显示全部

news2025/2/23 10:24:53

在系统中,内容过长需要省略,鼠标移上显示全部,这个是常用的功能,也有很多方案解决这种。

单行内容超出处理
常用的css方案:
.ellipsis {
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
}

该样式在宽度有限制的情况下使用,超出容器宽度的文本将被隐藏,并显示省略号。

注意flex布局flex:1的时候,需要设置min-width:0,否则无效;

但是实际情况下,系统希望超出部分,在鼠标移上显示全部,这时候可能就需要el-tooltip、title、或者popup处理,鼠标移上显示,但是这样会导致,没有超出的情况,鼠标经过也会有提示,不完美。

改进版本方案:
<template>
  <el-tooltip effect="light" :content="content" placement="top" :disabled="isDisabled">
    <div class="cm-tooltip" @mouseover="mouseoverHandle">
      <span ref="contentRef">{{ content }}</span>
    </div>
  </el-tooltip>
</template>

<script>
export default {
  props: {
    content: [String, Number],
  },
  data() {
    return {
      isDisabled: false,
    };
  },
  methods: {
    mouseoverHandle() {
      const parentWidth = this.$refs.contentRef.parentNode.offsetWidth;
      const width = this.$refs.contentRef.offsetWidth;
      this.isDisabled = width <= parentWidth;
    },
  },
};
</script>

通过一个全局组件,来是现实,使用类似el-tooltip,方便简单。

通过行内元素(span)不能设置高宽,高宽是根据它实际内容撑起来的,如果内容超出,其宽度一定会比实际父元素(块元素)宽度大,所以能实现,超出时才有tooltip,没超出就隐藏tooltip;

多行内容超出处理

常用的css方案:

.ellipsis-line-2 {
    display: -webkit-box;
    overflow: hidden;
    text-overflow: ellipsis;
    -webkit-line-clamp: 2;
    line-break: anywhere;
    -webkit-box-orient: vertical;
}

主要通过-webkit-line-clamp处理,超出多行;

改进方案
<template>
  <el-tooltip effect="light" :content="content" placement="top" :disabled="isDisabled">
    <div class="cm-two-tooltip" @mouseover="mouseoverHandle">
      <span ref="contentRef">{{ content }}</span>
    </div>
  </el-tooltip>
</template>

<script>
export default {
  props: {
    content: [String, Number],
  },
  data() {
    return {
      isDisabled: false,
    };
  },
  methods: {
    mouseoverHandle() {
      const parentHeight = this.$refs.contentRef.parentNode.offsetHeight;
      const height = this.$refs.contentRef.offsetHeight;
      this.isDisabled = height <= parentHeight ;
    },
  },
};
</script>

这个方案跟单行改进方案思路一样,只是多行需要用到了高度来处理。

带查看全部按钮
<script setup>
import { ref, watch, nextTick } from 'vue';

const props = defineProps({
  chanceData: { type: Array, default: () => [] },
});

const chanceContainer = ref(null);
const showViewBtn = ref(false);
const moreHandler = () => {
  let height = chanceContainer.value.scrollHeight;
  if (height > 106) {
    showViewBtn.value = true;
  } else {
    showViewBtn.value = false;
  }
};

watch(
  () => props.chanceData,
  () => {
    nextTick(() => {
      moreHandler();
    });
  },
  { immediate: true }
);
</script>

<template>
  <div class="chance-item" :class="{ 'chance-border': chanceData.length }" ref="chanceContainer">
    <div v-for="item in chanceData" class="chance-li">{{ item.name }}</div>
    <div class="view-btn" v-popover:chancePopover v-show="showViewBtn">查看全部</div>
    <el-popover ref="chancePopover" width="600" trigger="click">
      <div v-for="item in chanceData" class="chance-li">{{ item.name }}</div>
    </el-popover>
  </div>
</template>

<style scoped lang="less">
.chance-item {
  height: 104px;
  padding: 9px 12px;
  overflow: hidden;
  position: relative;
  &.chance-border {
    border: 1px solid #dcdee0;
    border-radius: 2px;
  }
}
.view-btn {
  position: absolute;
  color: #3874c5;
  background-color: #fff;
  right: 12px;
  bottom: 9px;
  cursor: pointer;
}
.chance-li {
  position: relative;
  padding-left: 12px;
  line-height: 22px;
  &::before {
    content: '';
    position: absolute;
    background-color: #595f6d;
    width: 6px;
    height: 6px;
    border-radius: 50%;
    left: 0;
    top: 8px;
  }
}
</style>

实现思路也是一致,也是通过css和js判断来实现!

大家有更好更优雅的方案,欢迎给我提意见 

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

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

相关文章

基于Android系统英语学习助手APP设计开发

一、 设计思路 1.1设计目标 1.2设计思路 1.3设计内容 1.3.1界面设计 1.3.2功能模块设计 1.3.3功能流程图 1.3.4数据库设计&#xff08;如果没有数据库这部分删除&#xff09; 1.4工具设备要求 1.5技术方案 二、设计过程与说明 2.1技术路线 2.2实现方案 2.3实现原理…

C#复习:面向对象基本概念

C#复习&#xff1a;面向对象基本概念 前言什么是面向对象类&#xff0c;名称空间的介绍 如何导入类库DLL引用(黑盒引用)项目引用(白盒引用)NuGet介绍 依赖关系C#的分装(个人理解) 前言 关于我C#的博客是根据刘铁猛老师的C#入门课程为基础写的&#xff0c;可以配合刘铁猛老师的…

.bat批处理命令处理文件

批处理命令处理文件找到上级目录&#xff0c;并删除文件与文件夹 参考资料&#xff1a; [BAT] 如何获取bat的上一级目录、上两级目录..._bat 上层目录_Risun_Lee的博客-CSDN博客echo offset currPath%~dp0set parentPathset parentparentPath:beginfor /f "tokens1,* de…

solidworks导出文本能打开的stl文件

几种以文本格式&#xff08;ASCII&#xff09;导出stl的设置 1.solidworks导出时需要在选项里设置导出格式为ASCII&#xff0c;当选择以二进制格式导出时&#xff0c;打开会乱码&#xff1b; 2.CAD直接导出的是以二进制形式导出的&#xff0c;导出后也无法使用文本打开&#xf…

NVIDIA DALI学习:数据加载

DALI的工作流&#xff0c; 如下图&#xff1a; 读取数据图像解码和变换&#xff0c;可以放到GPU上进行&#xff0c;也是加速的关键生成处理好的数据&#xff0c; 导出给计算引擎 测试用例 import ctypesimport numpy as np import nvidia.dali.fn as fn import nvidia.dali…

关于Godot动态生成节点的细节

var dy_btn Button.new()add_child(dy_btn)print(get_child(0).name) 此时获取的名词会带有动态类型&#xff0c;如果这个时候想通过特定的节点名词来获取节点是不行的 此时需要补充类似 dy_btn.name "a" 的代码&#xff0c;然后就能按照节点名词获取节点了

Java下打印九九乘法表

这个算法是基于打直角三角型演变而来&#xff0c;代码如下&#xff1a; public class MyWork {public static void main(String[] args) {for (int i 1; i < 10; i) {for (int j 1; j < i; j) {System.out.print(j "x" i "" i*j "\t&qu…

使用Arduino简单测试HC-08蓝牙模块

目录 模块简介模块测试接线代码测试现象 总结 模块简介 HC-08 蓝牙串口通信模块是新一代的基于 Bluetooth Specification V4.0 BLE 蓝牙协议的数传模块。无线工作频段为 2.4GHz ISM&#xff0c;调制方式是 GFSK。模块最大发射功率为4dBm&#xff0c;接收灵度-93dBm&#xff0c…

软考软件设计师-计算机组成与体系结构(上

软考中级 一、数据的表示如果是其他进制 二、把十进制转其他进制【短除法三、存储系统的层次结构存储系统-存储器的分类 四、把二进制转8进制与16进制二进制转8进制二进制转16进制 五、原码、反码、补码原码反码补码移码原码 反码 补码的取值范围 六、数据的表示-浮点数运算七、…

TienChin 渠道管理-配置字典常量

在字典管理当中添加渠道状态 channel_status&#xff1a;渠道状态 分别为&#xff1a; 正常&#xff0c;键值为1&#xff0c;回显样式为 success 禁用&#xff0c;键值为0&#xff0c;回显样式为 info !> 有个注意点&#xff1a;Vue3 当中 v-for 与 v-if 不能写在一起。 在上…

Linux 查看进程和线程

ps命令 在ps命令中&#xff0c;“-T”选项可以开启线程查看。下面的命令列出了由进程号为<pid>的进程创建的所有线程。 ps -T -p <pid> “SID”栏表示线程ID&#xff0c;而“CMD”栏则显示了线程名称。 你可以用 ps -eLf |grep XXX 来查看程序运行所产生的线程情…

005:vue2使用vue-type-writer实现打字机效果

Vue Type Writer是一个Vue.js 2打字机效果组件&#xff0c;支持像打字机一样模仿键入文本。 文章目录 1. 效果2. 安装使用 1. 效果 2. 安装使用 npm 安装 npm install vue-type-writer --save完整代码 <template><div class"app-container home"><…

MyBatis 高级使用

文章目录 动态SQL语句ifchoosetrimforeach 批量操作批量插入批量更新批量删除BatchExecutor 关联查询嵌套查询延迟加载 分页操作逻辑分页物理分页 MyBatis Generator添加配置文件添加插件生成 通用Mapper方式一方式二 MyBatis-Plus 动态SQL语句 动态 SQL 是 MyBatis 的强大特性…

【运维篇】二、配置文件与多环境控制

文章目录 1、临时属性2、IDEA中的临时属性3、配置文件4级分类4、关于四级分类的思考5、自定义配置文件6、多环境开发&#xff08;yaml版&#xff09;7、配置文件按环境分类8、include与group再细粒度9、一点思考10、多环境开发兼容问题 1、临时属性 jar包或者镜像已经打完了&a…

根据每帧点云的PCD文件和每帧的位姿合成整个点云地图(附python open3d 代码)

现在有多个PCD文件表示每帧的点云,有一个位姿文件,里面是每帧的位姿,需要根据每帧点云和每帧的位姿合成整个地图。 首先,从文件中读取所有点云文件的路径,并将其存储到一个列表中。然后,读取位姿文件,并将其转换为一个 3x4 的矩阵。 然后,遍历所有点云文件。对于每帧点…

如何通过简历展示自己的执行力和动力?

导语: 简历是求职过程中的重要工具&#xff0c;通过合适的展示方式能够有效地展示自己的执行力和动力。本文将分享一些技巧&#xff0c;帮助您在简历中突出这两个关键能力。 突出成就和项目经历: 在简历中详细描述您曾经完成的项目或工作&#xff0c;并着重强调其中的具体成果…

ICS TRIPLEX T9402 自动化控制模块

ICS TRIPLEX T9402 是一款自动化控制模块&#xff0c;通常用于工业自动化和控制系统中&#xff0c;用于监测、控制和自动化各种工业过程。以下是该产品的一些主要特点&#xff1a; 可靠性&#xff1a; T9402 模块通常具有高可靠性&#xff0c;以确保系统能够稳定运行&#xff0…

开学季哪个牌子的电容笔好?ipad2023手写笔推荐

到底是用苹果原装的电容笔&#xff0c;还是用平替的电容笔&#xff0c;这要根据自己的需要来决定&#xff0c;比如经常用在画画上&#xff0c;可以选择苹果原装笔&#xff1b;如果你一天里用来写东西的时间多于用来画画的时间&#xff0c;那你就该考虑一下&#xff0c;买一支更…

基于GBDT+Tkinter+穷举法按排队时间预测最优路径的智能导航推荐系统——机器学习算法应用(含Python工程源码)+数据集(一)

目录 前言总体设计系统整体结构图系统流程图 运行环境Python环境Pycharm 环境Scikit-learnt 模块实现1. 数据预处理1&#xff09;加载数据集2&#xff09;时间划分与保存3&#xff09;处理天气预报数据4&#xff09;增加特征5&#xff09;合并特征值 相关其它博客工程源代码下载…