vue 文本超出宽度超出部分隐藏,鼠标移入展示全部组件封装

在 VUE + ElementUI 的项目里面,标题内容超出固定宽度超出部分隐藏,鼠标移入显示全部内容。由于项目里面这一类的需求比较多,这里我考虑封装一下,方便使用。

组件封装的思路是借助 ElementUI 里面的 tooltip 组件来实现鼠标移入展示全部的效果,然后根据标题的长度来控制 tooltip 组件的显示隐藏。具体实现代码如下:
父组件:

<textOverflow maxWidth="400px" :content='item.subjectName'></textOverflow>

子组件:

<template>
	<div :style="{maxWidth:maxWidth}" class="text">
		<span v-if="!isOver" class="spanItem">{{content}}</span>
		<el-tooltip v-else class="item" effect="dark" :content="content" :placement="placement">
	      <span class="spanItem">{{content}}</span>
	    </el-tooltip>
	</div>
</template>
<script>
	export default {
		props:{
			content:{ //标题内容
				type:String,
				default:''
			},
			maxWidth:{//最大显示宽度
				type:String,
				default:'100px'
			},
			placement:{//提示位置
				type:String,
				default:'top-start'
			}
		},
		data(){
			return {
				isOver:false //是不是超出指定宽度
			}
		},
		mounted(){
			this.init();
		},
		methods:{
			init(){
				let dom = this.$refs.spanItem;
				if(dom.offsetWidth >= parseInt(this.maxWidth)){
					this.isOver = true;
				}else{
					this.isOver = false;
				}
			}
		}
	}
</script>
<style scoped="scoped">
	.text{text-overflow: ellipsis; overflow: hidden; white-space: nowrap; cursor: pointer;}
</style>

注意:

可以循环使用也可以单独使用,在子组件获取节点的时候使用 ref 和 refs 来注册和获取子元素,针对每一个节点判断内容是否超出指定宽度。
超出隐藏的效果添加到最外层 div 上,这样才能获取 span 真实文本的宽度。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值