JavaScript 实现文本溢出时的 hover 气泡效果

更新时间:2024-05-06 22:43:44   人气:3853
在网页设计中,实现文本溢出时显示hover气泡效果是一种常见的优化用户体验的方式。这种情况下,当一段文字由于空间限制无法完全展示时,在用户鼠标悬停(Hover)上去后以tooltip的形式完整地显示出隐藏的内容。下面将详细介绍如何使用JavaScript配合CSS来实现在文本溢出时的悬浮提示效果。

首先,我们通过HTML结构布局元素:

html

<div class="container">
<p id="text" title="">这是一段可能会超出容器范围的文字...</p>
</div>

<style scoped>
.container {
width: 200px; /* 假设这里的宽度有限 */
border:1px solid #ccc;
}
#text{
white-space: nowrap;
overflow:hidden;
text-overflow:ellipsis;
}
.tooltip {
position:absolute;
background-color:#fff;
padding:5px;
box-shadow: 0 0 3px rgba(0,0,0,.4);
display:none;
}
</style>

上述代码中的`<p>`标签设置了固定宽度且内容超过部分会用省略号代替(`text-overflow: ellipsis`)。同时为其添加了默认不显现的`.tooltip`样式类用于后续创建浮动框。

接下来是核心的JavaScript逻辑:

javascript

window.onload = function() {
var container = document.querySelector('.container');
var txtNode = document.getElementById('text');

// 判断是否需要 tooltip
if (txtNode.offsetWidth < txtNode.scrollWidth) {

// 创建并设置 tooltip 的 HTML 结构
let toolTipText = document.createElement("span");
toolTipText.classList.add('tooltip');
toolTipText.textContent = txtNode.innerText;

// 将 tooltip 添加到 DOM 中,并定位它相对于 'text' 元素的位置
container.appendChild(toolTipText);

const showTooltip = () => {
let rect = txtNode.getBoundingClientRect();

toolTipText.style.display = "block";
toolTipText.style.left = `${rect.right}px`;
toolTipText.style.top = `${rect.bottom + window.pageYOffset - parseInt(getComputedStyle(txtNode).fontSize)}px`;
};

const hideTooltip = () => {
toolTipText.style.display = "none";
};

// 鼠标 Hover 上去和离开事件绑定处理函数
txtNode.addEventListener('mouseover',showTooltip,false);
txtNode.addEventListener('mouseout',hideTooltip,false);
}
};


这段JS脚本的主要作用在于:加载页面完成后检查文本节点的实际宽度与滚动宽度的区别,如果实际宽度小于滚动宽度则表示存在溢出情况;然后动态生成一个包含全部原始文本内容的 Tooltip 节点插入DOM树中,并在其位置上进行精确计算及调整以便于跟随目标文本块展现出来。最后监听 `mouseover` 和 `mouseout` 事件切换Tooltip的显隐状态从而达到预期的效果。

总结来说,借助 JavaScript 可灵活判断文本长度并与 CSS 相结合完美实现了文本溢出时呈现hover气泡的功能,既保持界面整洁又提升了用户的阅读体验。