当前位置:首页 > 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。

安装 Tippy.js:

npm install tippy.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 定位

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

tooltips 实现 js

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 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js实现游标

js实现游标

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

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…