背景
当文字溢出时显示省略号是每一个前端开发工程师必备技能之一,但是文字溢出省略号显示后就无法看到完整内容了,这个时候就可以用到标签的title属性,或者一些UI组件库的tooltip组件,当鼠标移入元素则出现提示气泡,显示完整内容。
前端工程师常见的作法就是让提示气泡一直存在,不管文字是否溢出,鼠标移入都会出现提示气泡。但是有些场景下,需求方要求文字未溢出时鼠标移入不显示提示气泡,文字溢出时才显示提示气泡。
需求总结
文字未溢出时,鼠标移入不出现提示气泡,文字溢出时,鼠标移入显示提示气泡。
实现原理
- 获取到包裹文字元素的宽度
- 给元素添加鼠标移入事件
- 每次鼠标移入时,判断元素宽度是否符合要求
- 如果不符合,则添加气泡,否则不添加
实现代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CSS文字溢出显示提示title或者tooltip</title>
<style>
div {
width: 100px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
</style>
</head>
<body>
<div>
<span>我是一段没有用的废话!</span>
</div>
</body>
<script>
let dDom = document.getElementsByTagName('div')[0];
let sDom = document.getElementsByTagName('span')[0];
let dDomWidth = sDom.parentNode.offsetWidth;
let sDomWidth = sDom.offsetWidth;
sDom.addEventListener('mouseover', function () {
if (sDomWidth > dDomWidth) {
sDom.title = '我是一段没有用的废话!'
}
})
</script>
</html>
总结
实现该种需求的重点就是获取到元素宽度,以及合理的判断宽度。