原生JavaScript实现Tooltip浮动提示框特效

下面是“原生JavaScript实现Tooltip浮动提示框特效”的完整攻略。

什么是Tooltip浮动提示框特效

Tooltip浮动提示框特效是一种鼠标移入到某个元素上时,显示一个类似于气泡的提示框,提示框中包含了与该元素有关的相关信息,一般应用于网页中。

实现步骤

  1. HTML结构
    首先,需要在HTML中编写一个触发提示框的元素,例如一个标签。
<span class="tooltip" data-content="这是一个Tooltip提示框">这里是要提示的内容</span>

其中,data-content属性是用来存储要显示的提示框内容的。

  1. CSS样式
    接下来,需要编写CSS样式,设置提示框的样式和位置。
.tooltip {
    position: relative;
    display: inline-block;
    border-bottom: 1px dotted black;
    cursor: help;
    margin: 30px;
}
.tooltip::before {
    content: "";
    position: absolute;
    width: 0;
    height: 0;
    border-style: solid;
    border-width: 8px 8px 0 8px;
    border-color: #000 transparent transparent transparent;
    left: 50%;
    bottom: 100%;
    transform: translateX(-50%);
}
.tooltip::after {
    content: attr(data-content);
    position: absolute;
    background-color: black;
    color: white;
    padding: 5px;
    border-radius: 5px;
    font-size: 14px;
    bottom: 110%;
    left: 50%;
    transform: translateX(-50%);
    opacity: 0;
    transition: opacity 0.3s;
    white-space: nowrap;
}
.tooltip:hover::after {
    opacity: 1;
}

这里的CSS样式中,设置了position属性为relative,使得设置的绝对定位属性可以相对于该元素进行定位。同时,设置伪元素:before和:after,分别用来设置提示框的箭头和显示内容。通过:hover伪类,让提示框在鼠标悬浮时显示出来。

  1. JavaScript交互
    最后,需要编写JavaScript代码,实现交互效果,使得提示框可以随着鼠标移动而跟随。
const tooltipElements = document.querySelectorAll(".tooltip");

tooltipElements.forEach((tooltip) => {
  tooltip.addEventListener("mousemove", (e) => {
    const tooltipBox = tooltip.querySelector(".tooltip-box");
    tooltipBox.style.top = e.clientY + 20 + "px";
    tooltipBox.style.left = e.clientX + "px";
  });
});

这里使用querySelectorAll获取所有要进行提示框操作的元素,然后对每个元素添加mousemove事件,通过获取鼠标移动时的坐标,来改变提示框的位置。

示例如下

示例一

这是一个Tooltip浮动提示框效果的最基本实现,不带有任何交互效果。

<span class="tooltip" data-content="这是一个Tooltip提示框">这里是要提示的内容</span>
.tooltip {
    position: relative;
    display: inline-block;
    border-bottom: 1px dotted black;
    cursor: help;
}
.tooltip::before {
    content: "";
    position: absolute;
    width: 0;
    height: 0;
    border-style: solid;
    border-width: 8px 8px 0 8px;
    border-color: #000 transparent transparent transparent;
    left: 50%;
    bottom: 100%;
    transform: translateX(-50%);
}
.tooltip::after {
    content: attr(data-content);
    position: absolute;
    background-color: black;
    color: white;
    padding: 5px;
    border-radius: 5px;
    font-size: 14px;
    bottom: 110%;
    left: 50%;
    transform: translateX(-50%);
    opacity: 0;
    transition: opacity 0.3s;
    white-space: nowrap;
}
.tooltip:hover::after {
    opacity: 1;
}

示例二

这是一个带有交互效果的Tooltip浮动提示框,提示框可以随着鼠标移动而跟随。

<span class="tooltip" data-content="这是一个带有交互效果的Tooltip提示框">这里是要提示的内容</span>
.tooltip {
    position: relative;
    display: inline-block;
    border-bottom: 1px dotted black;
    cursor: help;
    margin: 30px;
}
.tooltip::before {
    content: "";
    position: absolute;
    width: 0;
    height: 0;
    border-style: solid;
    border-width: 8px 8px 0 8px;
    border-color: #000 transparent transparent transparent;
    left: 50%;
    bottom: 100%;
    transform: translateX(-50%);
}
.tooltip-box {
    position: absolute;
    background-color: black;
    color: white;
    padding: 5px;
    border-radius: 5px;
    font-size: 14px;
    white-space: nowrap;
}
.tooltip:hover .tooltip-box {
    opacity: 1;
}
const tooltipElements = document.querySelectorAll(".tooltip");

tooltipElements.forEach((tooltip) => {
  const tooltipBox = document.createElement("div");
  tooltipBox.classList.add("tooltip-box");
  tooltipBox.innerText = tooltip.getAttribute("data-content");
  tooltip.appendChild(tooltipBox);
  tooltip.addEventListener("mousemove", (e) => {
    tooltipBox.style.top = e.clientY + 20 + "px";
    tooltipBox.style.left = e.clientX + "px";
  });
});

这里在HTML中添加了一个子元素作为提示框的存放容器,然后在JavaScript中获取到该子元素,绑定mousemove事件,并通过获取鼠标位置,改变提示框的位置。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生JavaScript实现Tooltip浮动提示框特效 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • JavaScript高级 ES7-ES13 新特性详解

    JavaScript 高级 ES7-ES13 新特性详解 在这里,我们将介绍 JavaScript ES7 到 ES13 所引入的一些新特性。 1. ES7 新特性 1.1 includes 方法 includes() 方法可用于判断一个数组是否包含一个特定的值,并返回 true 或 false。这个方法在 ES7 中被正式引入,可以通过以下的方式来调用: …

    JavaScript 2023年6月10日
    00
  • DOM 高级编程

    DOM(Document Object Model)高级编程是指在使用 JavaScript 操作 DOM 时,更加深入地理解 DOM 的结构和特性,使得我们能够更加灵活地应用 DOM 进行编程。 以下是 DOM 高级编程的完整攻略: 1. 理解 DOM 树的结构 DOM 树由各种不同的节点组成,包括元素节点、文本节点、注释节点等。我们需要理解这些节点的层级…

    JavaScript 2023年6月10日
    00
  • 5种处理js跨域问题方法汇总

    以下是“5种处理js跨域问题方法汇总”的完整攻略: 1. 什么是跨域问题 跨域问题是指在浏览器端,当脚本试图访问来自不同源(域名、端口、协议)的资源时,会出现安全限制,这就是跨域问题。跨域问题对前端开发影响较大,如果不处理的话,可能会出现一些非常棘手的问题。 2. 为什么会出现跨域问题 跨域问题的产生是因为浏览器出于安全考虑而限制了客户端脚本中发起的跨域HT…

    JavaScript 2023年6月11日
    00
  • 7个Python中的隐藏小技巧分享

    下面是“7个Python中的隐藏小技巧分享”的完整攻略: 1. 列表推导式 在Python中,使用列表推导式可以轻松地生成一个列表,从而简化代码。 示例代码如下: # 生成列表中的平方值 squares = [i**2 for i in range(10)] print(squares) 输出结果如下: [0, 1, 4, 9, 16, 25, 36, 49…

    JavaScript 2023年6月11日
    00
  • JS实现含有中文字符串的友好截取功能分析

    让我来详细讲解一下 “JS实现含有中文字符串的友好截取功能分析” 的完整攻略。 1. 背景 在前端开发中,经常需要对文本进行截取展示,但是如果直接使用JS自带的字符串截取方法,会出现截取中文时的问题。因为中文字符在计算机中占用两个字节,如果按照字节截取,就会出现乱码或者截取到半个中文的情况。因此,我们需要对字符串截取封装一个方法,可以实现友好的中英文截取,而…

    JavaScript 2023年5月19日
    00
  • Javascript的数组与字典用法与遍历对象的属性技巧

    Javascript的数组与字典用法 数组 数组是Javascript中常用的数据结构之一,它是一种有序的、可重复的数据集合,可以通过索引来访问其中的元素。 定义和初始化数组 Javascript中定义数组有两种方式,一种是使用Array构造函数,另一种是使用数组字面量。 使用Array构造函数可以这样定义一个空数组: var arr = new Array…

    JavaScript 2023年5月27日
    00
  • JavaScript中子对象访问父对象的方式详解

    下面我来详细讲解“JavaScript中子对象访问父对象的方式详解”。 1. 使用this关键字 在JavaScript中,this关键字表示当前对象。使用this关键字可以访问当前对象的属性和方法,也可以通过this关键字访问当前对象的父对象。假设我们有一个如下的对象,其中包含子对象: let parentObj = { name: "父对象&q…

    JavaScript 2023年5月27日
    00
  • JS使用ajax方法获取指定url的head信息中指定字段值的方法

    要使用JS获取指定URL的Head信息中指定字段值,需要使用Ajax方法,具体操作流程如下: 创建XMLHttpRequest对象 XMLHttpRequest对象是用于在后台与服务器交换数据的核心技术之一,能够在不刷新页面的情况下更新网页的局部信息。 const xhr = new XMLHttpRequest(); 用open方法指定请求信息 open方…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部