我正在try 使用HTML的原生popover.我试着使用下面的JavaScript来打开/关闭弹出窗口.

HTML

<div>
  <button onclick="handlePopover(event, 'popover-1')">+</button>
  <aside id="popover-1" popover="">
    <p>My Test</p>
  </aside>
</div>

JavaScript

function handlePopover(event, id) {
  // Identify the first popover element with the given id
  const popover = document.getElementById(id)

  // Exit early if no matching popover was found
  if (!popover) return

  // Get the coordinates of the clicked button
  let rect = event.target.getBoundingClientRect()

  // Modify the coordinates of the popover
  popover.style.left = rect.left + 10 + "px"
  popover.style.top = rect.top + 10 + "px"

  // Toggle the display state
  popover.togglePopover()
}

弹出器正确地切换,并且定位正确.然而,它不会切换关闭时,我点击按钮第二(或第三,或第四…)时间但是请注意,如果我在弹出区域之外而不是在按钮顶部点击弹出窗口,弹出窗口会消失.

第二次点击按钮时,如何隐藏弹出窗口?

推荐答案

100

Without Custom event handler

您可以使用popovertarget属性轻松地做到这一点

<div>
  <button popovertarget="popover-1">+</button>
  <aside id="popover-1" popover>
    <p>My Test</p>
  </aside>
</div>

With Custom Event handler

Using manual popover state

如果要为此使用自定义事件,请使用popover="manual"

 <aside id="popover-1" popover="manual">
    <p>My Test</p>
  </aside>

Javascript相关问答推荐

为什么在获取回调内设置状态(不会)会导致无限循环?

从连接字符串创建客户端时,NodeJS连接到CosmosDB失败

如何使用Echart 5.5.0创建箱形图

Vega中的模运算符

在贝塞尔曲线的直线上找不到交叉点:(使用@Pomax的bezier.js)

浮动Div的淡出模糊效果

为什么ngModel不能在最后一个版本的Angular 17上工作?'

使用原型判断对象是否为类的实例

如何使用TypeScrip设置唯一属性?

Reaction组件在本应被设置隐藏时仍显示

元素字符串长度html

在JS中动态创建对象,并将其追加到HTML表中

将多个文本框中的输出合并到一个文本框中

有没有办法更改Chart.js 3.x.x中主要刻度的字体?

Jexl to LowerCase()和Replace()

为什么我不能使用其同级元素调用和更新子元素?

如何设置时间选取器的起始值,仅当它获得焦点时?

AstroJS混合模式服务器终结点返回404

如果查询为空,则MongoDB将所有文档与$in匹配

单击子按钮时将活动切换类添加到父分区