当前位置:首页 > JavaScript

tooltips 实现 js

2026-04-06 19:27:52JavaScript

使用原生 JavaScript 实现 Tooltips

通过监听鼠标事件动态创建提示框元素,适用于简单场景。

// 获取需要添加 tooltip 的元素
const elements = document.querySelectorAll('[data-tooltip]');

elements.forEach(element => {
  // 创建 tooltip 元素
  const tooltip = document.createElement('div');
  tooltip.className = 'tooltip';
  tooltip.textContent = element.dataset.tooltip;
  document.body.appendChild(tooltip);

  // 鼠标移入显示
  element.addEventListener('mouseenter', (e) => {
    tooltip.style.display = 'block';
    const rect = element.getBoundingClientRect();
    tooltip.style.left = `${rect.left + rect.width/2 - tooltip.offsetWidth/2}px`;
    tooltip.style.top = `${rect.top - tooltip.offsetHeight - 5}px`;
  });

  // 鼠标移出隐藏
  element.addEventListener('mouseleave', () => {
    tooltip.style.display = 'none';
  });
});
.tooltip {
  position: absolute;
  display: none;
  background: #333;
  color: white;
  padding: 5px 10px;
  border-radius: 4px;
  font-size: 14px;
  z-index: 100;
}

使用 CSS 伪元素实现简单 Tooltips

纯 CSS 方案适合不需要复杂交互的场景。

<button class="tooltip" data-tooltip="点击提交">提交</button>
.tooltip {
  position: relative;
}

.tooltip:hover::after {
  content: attr(data-tooltip);
  position: absolute;
  bottom: 100%;
  left: 50%;
  transform: translateX(-50%);
  background: #333;
  color: white;
  padding: 5px 10px;
  border-radius: 4px;
  white-space: nowrap;
  font-size: 14px;
}

使用第三方库实现高级 Tooltips

对于复杂需求,推荐使用成熟的工具库如 Tippy.js。

tooltips 实现 js

安装 Tippy.js:

npm install tippy.js

基本使用:

tooltips 实现 js

import tippy from 'tippy.js';
import 'tippy.js/dist/tippy.css';

tippy('#element', {
  content: '自定义内容',
  placement: 'top',
  animation: 'fade',
  theme: 'light',
  arrow: true
});

高级配置示例:

tippy('[data-tooltip]', {
  content(reference) {
    return reference.getAttribute('data-tooltip');
  },
  onShow(instance) {
    if (!reference.hasAttribute('data-loaded')) {
      fetchContent().then(data => {
        instance.setContent(data);
        reference.setAttribute('data-loaded', true);
      });
    }
  }
});

实现可访问性 Tooltips

确保 tooltips 对屏幕阅读器友好。

const button = document.getElementById('tooltip-button');
const tooltip = document.createElement('div');
tooltip.setAttribute('role', 'tooltip');
tooltip.setAttribute('id', 'tooltip-content');
tooltip.textContent = '提示信息';

button.setAttribute('aria-describedby', 'tooltip-content');
document.body.appendChild(tooltip);

button.addEventListener('focus', showTooltip);
button.addEventListener('blur', hideTooltip);
button.addEventListener('mouseenter', showTooltip);
button.addEventListener('mouseleave', hideTooltip);

function showTooltip() {
  tooltip.style.visibility = 'visible';
}

function hideTooltip() {
  tooltip.style.visibility = 'hidden';
}

响应式 Tooltips 定位

自动调整位置避免超出视口。

function positionTooltip(element, tooltip, position = 'top') {
  const elemRect = element.getBoundingClientRect();
  const tooltipRect = tooltip.getBoundingClientRect();
  const viewportWidth = window.innerWidth;
  const viewportHeight = window.innerHeight;

  let top, left;

  switch(position) {
    case 'top':
      top = elemRect.top - tooltipRect.height;
      left = elemRect.left + (elemRect.width - tooltipRect.width) / 2;
      if (top < 0) position = 'bottom';
      break;
    case 'bottom':
      top = elemRect.bottom;
      left = elemRect.left + (elemRect.width - tooltipRect.width) / 2;
      if (top + tooltipRect.height > viewportHeight) position = 'top';
      break;
    // 其他方向处理...
  }

  // 最终位置调整
  tooltip.style.top = `${Math.max(0, top)}px`;
  tooltip.style.left = `${Math.max(0, Math.min(left, viewportWidth - tooltipRect.width))}px`;
}

标签: tooltipsjs
分享给朋友:

相关文章

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…

js实现路由

js实现路由

js实现路由的方法 在JavaScript中实现路由功能可以通过多种方式完成,以下是几种常见的方法: 使用原生JavaScript实现路由 通过监听window.onhashchange事件来实现基…

js实现上传图片

js实现上传图片

使用HTML5的File API实现图片上传 HTML5的File API允许通过JavaScript访问用户选择的文件。需要创建一个文件输入元素,并监听其change事件。 <input t…

js 实现拖拽

js 实现拖拽

实现拖拽的基本步骤 在JavaScript中实现拖拽功能需要监听几个关键事件:mousedown、mousemove和mouseup。以下是实现的基本逻辑。 监听目标元素的mousedown事件,记…