You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅在大屏断点下启用Bootstrap弹出框(popover)?

问题描述

我有一个可正常运行的Bootstrap弹出框(popover),相关代码如下:

标记代码

<a data-bs-toggle="popover"
   data-bs-trigger="focus hover"
   data-bs-placement="bottom"
   data-bs-html="true"
   data-bs-content="My popover content"
   href="#">
   Click me
</a>

调用代码

const popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'))
const popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
    return new Bootstrap.Popover(popoverTriggerEl);
})

当我悬停在“Click me”链接上时,弹出框会按预期显示,但在iPad等触控设备上点击该链接时,弹出框也会触发显示。我希望实现以下任一效果:

  • 在小于大屏(large)的断点下完全禁用弹出框
  • 在触控设备上完全禁用弹出框

解决方案一:按Bootstrap断点禁用(小于lg断点时禁用)

Bootstrap默认lg断点为992px,我们可以通过检测窗口宽度,动态控制弹出框的初始化与销毁:

// 初始化/销毁弹出框的核心函数
function togglePopoversByBreakpoint() {
  const lgBreakpoint = 992;
  const popoverTriggers = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'));

  if (window.innerWidth >= lgBreakpoint) {
    // 大于等于lg断点时初始化未创建的弹出框
    popoverTriggers.forEach(el => {
      if (!el._popoverInstance) {
        el._popoverInstance = new Bootstrap.Popover(el);
      }
    });
  } else {
    // 小于lg断点时销毁已存在的弹出框
    popoverTriggers.forEach(el => {
      if (el._popoverInstance) {
        el._popoverInstance.dispose();
        delete el._popoverInstance;
      }
    });
  }
}

// 页面加载时执行初始化
window.addEventListener('load', togglePopoversByBreakpoint);
// 窗口大小改变时重新判断
window.addEventListener('resize', togglePopoversByBreakpoint);

解决方案二:检测触控设备禁用弹出框

通过浏览器的触控特性检测,仅在非触控设备上初始化弹出框:

// 判断是否为触控设备
function isTouchDevice() {
  return 'ontouchstart' in window || navigator.maxTouchPoints > 0;
}

// 仅在非触控设备上初始化弹出框
if (!isTouchDevice()) {
  const popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'))
  popoverTriggerList.forEach(el => {
    new Bootstrap.Popover(el);
  });
}

若需应对设备动态切换(如外接鼠标的触控设备),可结合pointerdown事件补充检测,但上述代码已覆盖绝大多数常规场景。


内容的提问来源于stack exchange,提问作者Matt Komarnicki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 11:16:07