el-tooltip-文字溢出展示,文字不溢出不展示的功能实现

1.  页面展示效果如图所示

2. 项目需求:文字出现截断鼠标悬浮则出现提示框,不出现截断则不出现。

3. 方案:

        (1)开始想到的是取内容的length进行判断,后面发现文字有标点符号,用length判断不准确;

        (2)后面使用鼠标移入事件【@mouseover】实现此功能,代码如下 

<div class="list-item-b">
	<p class="industry" ref="industryContainer">
		<span style="text-wrap: nowrap">所属行业:</span>
			<el-tooltip placement="top" effect="light" :disabled="!isDisabledTooltip" :open-delay="200" popper-class="supplier-info-popper">
				<div slot="content" style="max-width: 1200px; line-height: 20px" class="font-14 tooltip" v-html="item.industryTypeName" />
				<p>
					<span :class="['text-color', `inName${i}`]" @mouseover="isShowTootip(`.inName${i}`, 'offsetWidth')">{{ item.industryTypeName }}</span>
				</p>
			</el-tooltip>
	</p>
	<p class="flex business">
		<el-tooltip placement="top" effect="light" :disabled="!isDisabledTooltip" :open-delay="200" popper-class="supplier-info-popper">
			<div slot="content" style="max-width: 1200px; line-height: 20px" class="font-14 tooltip" v-html="item.businessScope" />
				<p>
					经营范围:
					<span ref="spanRef" :class="['text-color', `clName${i}`]" @mouseover="isShowTootip(`.clName${i}`, 'offsetHeight')">{{ item.businessScope }}</span>
				</p>
		</el-tooltip>
	</p>
</div>
isShowTootip(className, offset) {
	const dom = document.querySelector(className)
	this.isDisabledTooltip = dom[offset] > dom.parentNode[offset]
}

因为行业是一行超出就出现截断,所以这里获取的是宽【offsetWidth】;

经营范围是两行出现截断,获取的是高【offsetHeight】。

(3)做的过程中出现的问题:

最开始没有加:open-delay="200",出现的情况是鼠标第一次移入时该展示提示框并没有展示,而是第二次移入才展示,应该是展示框已经加载完成,isDisabledTooltip的值还没有赋值成功,执行顺序的问题,加上组件的延迟出现的属性:open-delay="200"后解决了这一问题 ;

根据ui要求修改提示框边框线,使用popper-class绑定类名,一直不生效,使用v-deep也是不生效的,打开f12选择一下提示框的元素会发现并没有在这个这个页面组件的布局之内,穿透是不起作用的,需要去掉scoped,所以一定要起一个特殊的类名,避免出现重复。

以上是实现这一功能的全部过程,如有问题欢迎留言,感谢!!!

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
el-tooltip是Vue框架中的一个指令,用于在文字溢出展示tooltip提示。可以通过设置元素的宽度和内容的宽度来判断是否需要展示tooltip。如果内容的宽度大于元素的宽度,则展示tooltip提示,否则不展示。可以使用以下代码实现文字溢出的效果: ```css li { overflow: hidden !important; text-overflow: ellipsis !important; display: -webkit-box !important; -webkit-line-clamp: 1 !important; -webkit-box-orient: vertical !important; } ``` 在鼠标移入元素时,可以通过比较元素的实际宽度和可视宽度来判断文字是否溢出。如果实际宽度大于可视宽度,则文字溢出,否则不溢出。可以使用以下代码实现: ```javascript visibilityChange(event) { const ev = event.target; const evWeight = ev.scrollWidth; const contentWeight = ev.clientWidth; if (evWeight > contentWeight) { // 实际宽度 > 可视宽度,文字溢出 this.isShowTooltip = false; } else { // 否则为不溢出 this.isShowTooltip = true; } } ``` 当没有传递值给el-tooltip指令时,将使用el-tooltip的默认配置,提示内容默认显示指令绑定元素的文本内容。可以使用以下代码实现: ```html <el-input v-model="value" placeholder="请输入内容" style="width: 200px; margin-bottom: 25px"></el-input> <div v-overflow-tooltip class="overflow">{{ value }}</div> ``` 如果需要自定义tooltip的内容、主题、显示位置等参数,可以通过传递参数给el-tooltip指令来实现。可以使用以下代码实现: ```html <el-input v-model="value" placeholder="请输入内容" style="width: 200px; margin-bottom: 25px"></el-input> <div v-overflow-tooltip="{content:'这是通过content自定义的溢出显示内容',effect:'light'}" class="overflow">{{ value }}</div> ``` 以上是关于el-tooltip文字溢出的一些解决方案和示例代码。希望对你有帮助!\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [Vue 设置el-tooltip根据文字溢出...显示](https://blog.csdn.net/CCC_chtt/article/details/130345523)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [自定义vue指令,实现el-tooltip仅在文字溢出时显示,文字溢出则不显示,复制即可使用](https://blog.csdn.net/qq1219579255/article/details/129446532)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值