JS 原生实现title (自定义样式,延迟显示)

需求:
原生提供的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;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王小王和他的小伙伴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值