仅当文本过长时,执行某些操作(比如:弹出气泡显示完整内容,否则无需弹出)

4 篇文章 0 订阅
3 篇文章 0 订阅

demo:

判断文本是否过长,过长就显示“我过长啦”。

效果:

测试数据:

dataArr: [{
			id: 'test0',
			name: '哈哈哈哈哈',
			isOverflow: false
		},
		{
			id: 'test1',
			name: '哈哈哈哈哈哈',
			isOverflow: false
		}
	]

布局:

		<div class="text-title">计算文本是否过长</div>
		<div class="text-item" v-for="(item,index) in dataArr" :key="index">
			<div class="item-name single-text" :id="item.id">
				<span class="dot"></span>
				<span class="text">{{item.name}}</span>
			</div>
			<div class="item-overflow" v-if="item.isOverflow">我超长啦</div>
		</div>

计算是否过长(核心):

isTextOverflow(elId, padding) {
    if (!elId) {
		return
	}

	let isShow = false;
	let cellChild = document.getElementById(elId);
	if (cellChild) {
		const range = document.createRange();
		range.setStart(cellChild, 0);
		range.setEnd(cellChild, cellChild.childNodes.length);
		const rangeWidth = range.getBoundingClientRect().width;
		if (rangeWidth + padding > cellChild.offsetWidth || cellChild.scrollWidth > cellChild.offsetWidth) {
			isShow = true;
		}
	}
	return isShow;
}

childNodes 属性返回节点的子节点集合

计算、更新数据:

setTimeout(() => {
	for (var i = 0; i < this.dataArr.length; i++) {
		let obj = this.dataArr[i];
		if (obj) {
			this.$set(obj, 'isOverflow', this.isTextOverflow(obj.id, 100));
		}
	}
}, 10);

对象obj在执行this.$set()更新前,必须持有isOverflow属性,否则在部分安卓手机,更新数据会无效。

部分css:

.text-item .item-name {
	padding: 0px 50px;
	width: 100px;
	background-color: #E8E8E8;
}
.single-text {
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

写完啦,(*^▽^*)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值