vue根据文字动态判断溢出...鼠标悬停显示el-tooltip展示

使用自定义el- tooltip 组件

定义

Tooltip是一种小型弹出框,它显示有关特定页面元素的信息,例如按钮、链接或图标。Tooltip通常以半透明的气泡形式呈现,并出现在页面元素的旁边或下方。

它可以改善用户体验,使用户更容易理解页面元素的功能和意图。用户可以通过将鼠标悬停在页面元素上来快速了解有关该元素的信息,而无需离开当前页面或浏览其他页面。

定位问题,很重要,top topLeft topRight bottom bottomLeft bottomRight left right,tooltip可以出现在不同的位置
采用默认插槽的方式,将需要tooltip的内容放置
通过父组件传入的visible进行手动控制tooltip的显现和隐藏
可以自定义tooltip背景色,如果自定义了,文字为白色

创建tooltip组件

/assets/directive/tooltip.js

在全局main.js引入组件

import tooltip from '@/assets/directive/tooltip.js'
Vue.directive('tooltip', tooltip)

组件代码(按需修改)

import {  getLanguage } from '@/assets/language/langs'
export default {// 指令所在组件的 VNode 及其子 VNode 全部更新后调用componentUpdated (el) {//   console.log(...arguments);/* 第1步:先要创建一个容器`span`去获取文本的宽度 */// 获取当前元素的styleconst curStyle = window.getComputedStyle(el, '');// 创建一个容器来记录文字的widthconst textSpan = document.createElement('span');// 设置新容器的字体样式,确保与当前需要隐藏的样式相同textSpan.style.fontSize = curStyle.fontSize;textSpan.style.fontWeight = curStyle.fontWeight;textSpan.style.fontFamily = curStyle.fontFamily;// 将容器插入body,如果不插入,offsetWidth为0document.body.appendChild(textSpan);// 设置新容器的文字const arr = el.innerText.split("  ");textSpan.innerHTML = arr[0];// console.log(textSpan.offsetWidth,'-------设el')var menu = document.getElementById('scenesSub');var uls = menu.getElementsByTagName('ul');var lis = menu.getElementsByTagName('li');var htmlWidth = document.documentElement.offsetWidth;// 如果字体元素大于当前元素长度,则需要隐藏/* 第2步:用获取到的宽跟`元素长度`的宽进行对比,如果文本字体大于当前`元素长度`元素的宽度,则需要title提示* 第3步:监听`el`的`onmouseenter`以及`onmouseleave`的鼠标移入移出事件*/ var jmz = {};jmz.GetLength = function(str) {///<summary>获得字符串实际长度,中文2,英文1</summary>///<param name="str">要获得长度的字符串</param>var realLength = 0, len = str.length, charCode = -1;for (var i = 0; i < len; i++) {charCode = str.charCodeAt(i);if (charCode >= 0 && charCode <= 128) realLength += 1;else realLength += 2;}return realLength;};//鼠标移入el.onmouseenter = (e) => {// console.log(e);var currLang=getLanguage()var innerlength= jmz.GetLength(el.innerText)// console.log(innerlength, el.innerText,currLang,'==========el.innerText========',innerlength > fontsmaller);//根据不同的语言设置不同的元素宽度var fontsmaller=30if(currLang=='CN'){ fontsmaller=28}else if(currLang=='EN'){ fontsmaller=36}else { fontsmaller=45}if (innerlength > fontsmaller){el.style.overflow = 'hidden';el.style.textOverflow = 'ellipsis';el.style.whiteSpace = 'nowrap';/* 第4步:鼠标移入`onmouseenter`事件里需要处理title提示的显示 */ // 创建浮层元素并设置样式const kxmTooltipDom = document.createElement('div');kxmTooltipDom.style.cssText = `display: inline-block;max-width: 2rem;max-height: 2rem;position: absolute;top: ${e.clientY + 5}px;left: ${e.clientX}px;padding: 0.02rem;overflow: auto;font-size: 0.07rem;color: #333;background-color: #FFF;border-radius: 0.015rem;border: 0.005rem solid #333;z-index: 19999`;// 设置id方便寻找kxmTooltipDom.setAttribute('id', 'kxm-tooltip');// 将浮层插入到body中document.body.appendChild(kxmTooltipDom);// 浮层中的文字document.getElementById('kxm-tooltip').innerHTML = el.innerText;}// 鼠标移出el.onmouseleave = () => {// console.log(...arguments);/* 第5步:鼠标移出`onmouseleave`需要移出title显示的元素 */ // 找到浮层元素并移出const kxmTooltipDom = document.getElementById('kxm-tooltip');kxmTooltipDom && document.body.removeChild(kxmTooltipDom);}} // 需要注意:更新完之后需要移除容器,不然body里会多一个span元素内容document.body.removeChild(textSpan);},// 指令与元素解绑时unbind () {// console.log(...arguments);/* 第6步:解绑移除浮层元素 */// 找到浮层元素并移除const kxmTooltipDom = document.getElementById('kxm-tooltip');kxmTooltipDom && document.body.removeChild(kxmTooltipDom);}}
 <el-menu-item v-for="(items, indexs) in item.children"  :key="indexs" :index="items.linkName" v-tooltip >{{ items.linkName }} </el-menu-item>

关于其中offsetWidth、clientWidth、scrollWidth学习记录

关于js中的offsetWidth、clientWidth、scrollWidth等一系列属性及其方法一直都傻傻分不清,这里就来总结一下这些方法的用法和含义。

<script>/******* 元素视图属性* offsetWidth 水平方向 width + 左右padding + 左右border-width* offsetHeight 垂直方向 height + 上下padding + 上下border-width* * clientWidth 水平方向 width + 左右padding* clientHeight 垂直方向 height + 上下padding* * offsetTop 获取当前元素到 定位父节点 的top方向的距离* offsetLeft 获取当前元素到 定位父节点 的left方向的距离* * scrollWidth 元素内容真实的宽度,内容不超出盒子高度时为盒子的clientWidth* scrollHeight 元素内容真实的高度,内容不超出盒子高度时为盒子的clientHeight* ****** 元素视图属性结束* ****** Window视图属性(低版本IE浏览器[<IE9]不支持) 【自测包含滚动条,但网络教程都说不包含???】* innerWidth 浏览器窗口可视区宽度(不包括浏览器控制台、菜单栏、工具栏) * innerHeight 浏览器窗口可视区高度(不包括浏览器控制台、菜单栏、工具栏)* ***** Window视图属性结束* ****** Document文档视图* (低版本IE的innerWidth、innerHeight的代替方案)* document.documentElement.clientWidth 浏览器窗口可视区宽度(不包括浏览器控制台、菜单栏、工具栏、滚动条)* document.documentElement.clientHeight 浏览器窗口可视区高度(不包括浏览器控制台、菜单栏、工具栏、滚动条)* * document.documentElement.offsetHeight 获取整个文档的高度(包含body的margin)* document.body.offsetHeight 获取整个文档的高度(不包含body的margin)* * document.documentElement.scrollTop 返回文档的滚动top方向的距离(当窗口发生滚动时值改变)* document.documentElement.scrollLeft 返回文档的滚动left方向的距离(当窗口发生滚动时值改变)****** Document文档视图结束* ****** 元素方法* 1. getBoundingClientRect() 获取元素到body*  bottom: 元素底边(包括border)到可视区最顶部的距离*  left: 元素最左边(不包括border)到可视区最左边的距离*  right: 元素最右边(包括border)到可视区最左边的距离*  top: 元素顶边(不包括border)到可视区最顶部的距离*  height: 元素的offsetHeight*  width: 元素的offsetWidth*  x: 元素左上角的x坐标 *  y: 元素左上角的y坐标 * * 2. scrollIntoView() 让元素滚动到可视区* * ***** 元素方法结束* */
</script>

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

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

相关文章

Linux cmake 初窥【3】

1.开发背景 基于上一篇的基础上&#xff0c;已经实现了多个源文件路径调用&#xff0c;但是没有库的实现 2.开发需求 基于 cmake 的动态库和静态库的调用 3.开发环境 ubuntu 20.04 cmake-3.23.1 4.实现步骤 4.1 准备源码文件 基于上个试验的基础上&#xff0c;增加了动态库…

优思学院|精益六西格玛黑带培训的内容有哪些?【附思维导图】

引言 在现代企业中&#xff0c;精益六西格玛黑带&#xff08;或称六西格玛黑带&#xff09;处于实施六西格玛方法的最前线。然而&#xff0c;他们的职责远不止执行者的角色。黑带既学习六西格玛的工具&#xff0c;又主导项目以改进绩效指标。在更长远的角度看&#xff0c;他们…

擎天科技与禅道合作,打造统一的项目管理平台

统一、全面的项目管理平台能够帮助企业优化管理流程&#xff0c;提升业务效率。擎天集团选择与禅道软件合作&#xff0c;打造统一的项目管理平台&#xff0c;在降低自研软件的研发成本、打破团队信息孤岛、保障数据全面性等方面效果显著&#xff0c;大大提高了团队沟通协作效率…

25852-47-5,MAc-PEG-MAc通常作为高分子材料的交联剂,以提高材料的力学性能和稳定性

【试剂详情】 英文名称 Methacrylate-PEG-Methacrylate&#xff0c;MAc-PEG-MAc 中文名称 甲基丙烯酸酯-聚乙二醇-甲基丙烯酸酯 CAS号 25852-47-5 外观性状 由分子量决定&#xff0c;固体或者液体。 分子量 0.4k&#xff0c;0.6k&#xff0c;1k&#xff0c;2k&#xf…

基于51单片机的温度检测自动调节设计—温度上下限报警自动控制

基于51单片机的温度自动调节 &#xff08;仿真&#xff0b;程序原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.DS18B20检测温度给单片机处理&#xff1b; 2.LCD1602显示实时温度、温度上下限&#xff1b; 3.三个按键可设置温度上下限&#xff1…

【项目】使用Yolov8 + tesseract 实现“营业执照”信息解析(OCR) + 输入可为图片或者pdf + 完整代码 + 整体方案 + 全网首发

本项目可用于毕业设计参考、实验等,营业执照分为横版和竖版,整体检测+识别效果如下所示: 说明:图片来源于网络,如有侵权,请联系作者删除。 目录

【JUC】并发编程 Synchronized 锁升级原理

Synchronized如何实现同步/互斥的效果&#xff1f; monitorenter&#xff1a; 将锁对象对象头中Mark Word的前30bit替换成指向操作系统中与其关联的monitor对象&#xff0c;将锁记录位状态改为10 monitorexit&#xff1a; 将锁对象对象头中Mark Word进行重置&#xff0c;重新恢…

蓝桥杯练习系统(算法训练)ALGO-946 Q神的足球赛

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 足球赛上&#xff0c;只见Q神如闪电般的速度带球时而左&#xff0c;时而右&#xff0c;时而前&#xff0c;时而后&#xff…

第二证券|摘星脱帽行情火爆 超40只ST股候场

5月8日&#xff0c;ST中嘉、*ST明诚强势涨停&#xff0c;2家公司年内均请求吊销危险警示。其间ST中嘉自4月29日以来&#xff0c;已接连录得5个涨停板&#xff1b;*ST明诚自4月23日以来9个交易日录得8个涨停板。 年报季向来是几家欢喜几家愁的时间&#xff0c;有公司披星戴帽&a…

【优选算法】——Leetcode——LCR 179. 查找总价格为目标值的两个商品

1.题目 2. 解法⼀&#xff08;暴⼒解法&#xff0c;会超时&#xff09;&#xff1a; 1.算法思路&#xff1a; 2.图解 3. 代码实现 3. 解法⼆&#xff08;双指针-对撞指针&#xff09;&#xff1a; 1.算法思路&#xff1a; 2.图解 3.代码实现 1.C语言 2…

如何快速学习VCU电控开发

本课程基于实际项目案例和岗位需求技能制定教学大纲&#xff0c;以任务驱动方式引导学员&#xff0c;让学员快速掌握VCU开发知识。首先从VCU开发必备知识点和MATLAB/Simulink软件建模工具的使用入手&#xff0c;夯实学员基础。再通过策略设计、模型搭建和测试标定来指导学员完成…

AI图书推荐:使用FastAPI框架构建AI服务

《使用FastAPI构建生成式AI服务》&#xff08;Building Generative AI Services with FastAPI (Early Release) &#xff09;是一本由Ali Parandeh编写的书籍&#xff0c;计划于2025年3月首次出版&#xff0c;该书以实践为导向&#xff0c;指导读者如何开发具备丰富上下文信息的…

【k8s多集群管理平台开发实践】十二、开发总结及注意事项【完结】

文章目录 简介总结前面11章节所实现的功能&#xff1a; 一.完善集群更多功能1.1.可以扩展更多的功能 二.该系列课程代码地址三.技术栈及开发经验3.1.开发过程中所使用到的一些技术栈 四.开发过程中需要注意的事项五.反馈与交流 简介 该系列文章主要是介绍了多k8s集群平台开发的…

【前端】CSS基础(1)

文章目录 前言一、CSS基础1、 CSS是什么2、 CSS基本语法规范3、 代码风格3.1 样式格式3.2 样式大小写3.3 空格规范 4、 CSS引入方式4.1 内部样式表4.2 行内样式表4.3 外部样式 前言 这篇博客仅仅是对CSS的基本结构进行了一些说明&#xff0c;关于CSS的更多讲解以及HTML、Javasc…

iOS MRC那句话

混编时使用MRC文件需要使用这句话 -fno-objc-arc在下图中显示的位置添加

Pytorch常用的函数(九)torch.gather()用法

Pytorch常用的函数(九)torch.gather()用法 torch.gather() 就是在指定维度上收集value。 torch.gather() 的必填也是最常用的参数有三个&#xff0c;下面引用官方解释&#xff1a; input (Tensor) – the source tensordim (int) – the axis along which to indexindex (Lo…

JumpServer发布web应用

项目背景&#xff1a; 由于防火墙密码安全没有达到审计要求&#xff0c;需要加固防火墙用户安全&#xff0c;通过JumpServer发布防火墙登录页面&#xff0c;提供远程访问 认证要求&#xff1a; 1、密码记忆多次 2、密码大小写 3、密码字符 4、密码数字 加固前密码策略&…

详解BOM编程

华子目录 BOM编程window对象常见的window对象的属性常见的window对象的方法注意 history对象history对象的属性history对象的方法 screen 对象navigator 对象属性方法 location对象属性方法示例 BOM编程 JavaScript本质是在浏览器中运行&#xff0c;所以JavaScript提供了BOM&a…

初学java

注意点 1.使用关键字long的时候&#xff0c;在其赋值的时候要在后面加上大写或者小写的l&#xff0c;个人推荐大写&#xff0c;小写与数‘1’难区分。 2.函数的名字要与文件夹的名字相同&#xff0c;并且文件夹后面一定要有.java。例如这个的名字是Main,函数就得用这个&#x…

docker学习笔记(四)制作镜像

目录 第1步&#xff1a;编辑Dockerfile 第2步&#xff1a;编辑requirements.txt文件 第3步&#xff1a;编辑app.py文件&#xff0c;我们的程序文件 第4步&#xff1a;生成镜像文件 第5步&#xff1a;使用镜像&#xff0c;启动容器 第6步&#xff1a; 启动redis容器、将容器…