需求:
原生提供的title ,不提供延迟显示。
更改:自定义添加DOM节点,当做title,通过控制鼠标事件,控制自定义title是否显示。以及延迟1.5S后显示
代码:
封装函数:
export function contentTitle(eleDom: HTMLDivElement | HTMLElement, textTips: string | null) {
let conSetTimeout: NodeJS.Timer | null = null;
const itemDom = document.createElement("p"); //增加提个DOM p标签,用于展示 自定义title
itemDom.setAttribute('class', 'robotHeaderBar-Value'); //添加class命名,用于设置自定义title样式
itemDom.textContent = textTips; //参数textTips 代表需要展示的自定义title文本
let itemDomShow = false; //用于判断是否添加了节点,用在清除延时器
const setTime = 1500;//延迟1.5秒
//鼠标移入事件
const eleMouseenter = function () {
conSetTimeout = setTimeout(function () {
//移入增加DOM节点 (自定义title)
//eleDom表示,需要在哪个DOM下增加title
eleDom.appendChild(itemDom);
itemDomShow = true;
}, setTime);
};
//鼠标移出
const eleMouseleave = function () {
//清除延时器
clearTimeout(Number(conSetTimeout));
if (itemDomShow) {
//删除节点
eleDom.removeChild(itemDom);
itemDomShow = false;
}
};
// 点击后也设置为不显示自定义title
const eleClick = function () {
clearTimeout(Number(conSetTimeout));
if (itemDomShow) {
eleDom.removeChild(itemDom);
itemDomShow = false;
}
};
eleDom.addEventListener("mouseenter", eleMouseenter);
eleDom.addEventListener("mouseleave", eleMouseleave);
eleDom.addEventListener("click", eleClick);
}
使用:”
//移入封装的函数
import { contentTitle } from 'vs/base/common/util/util';
//文本内容
const textTips = 'title文本内容';
//添加自定义属性 target-title
//itemContainer表示,需要在哪个DOM下增加title(自定义属性)
itemContainer.setAttribute("target-title", textTips);
//判断这个DOM节点是否包含这个自定义属性,
if (itemContainer.getAttributeNode("target-title")) {
//有的话直接调用函数。(用于多个相同DOM命名,统一添加,)
const textTips = itemContainer.getAttribute('target-title');
//如果用的地方比较少,不需要多个添加,可以直接调用函数
//itemContainer 表示,需要在哪个DOM下增加title
//textTips 需要展示的title文本
contentTitle(itemContainer, textTips);
}
css
.父级{
position: relative;
}
.robotHeaderBar-Value {
border: 1px solid black;
position: absolute;
left: 30px;
top: 35px;
z-index: 99;
font-size: 12px;
line-height: 12px;
padding: 7px;
white-space: nowrap; //强制一行展示
background-color: rgb(255, 255, 255);
background:rgba(48,49,51);
color: #fff;
border-radius: 3px;
}