≪ Today I learned.
RSS購読
    公開日
    タグ
    JavaScript
    著者
    ダーシノ

    ToggleEventを使ってPopoverの開閉を検知する

    ToggleEventを使うことで、Popoverの開閉を検知することができる。

    ブラウザ対応状況

    Popover要素の開閉イベント

    ToggleEventのoldState/newStateプロパティで、open/closedの状態を取得できる。

    <button popovertarget="my-popover">Popover</button>
    
    <div id="my-popover" popover>Popover Content</div>
    const popover = document.querySelector('#my-popover')
    
    popover.addEventListener('beforetoggle', event => {
      /**
       * event.oldState: 開閉前の状態(open / closed)
       * event.newState: 開閉後の状態(open / closed)
       */
    })

    dialog要素のshowModal()の場合

    dialog#showModal()を使った場合、ブラウザによってToggleEventが発火しないことがある。

    2024年11月現在では、Chrome 132 beta、FirefoxではToggleEventが発火するが、Safari TPでは発火しなかった。

    <button popovertarget="my-dialog">Dialog</button>
    
    <dialog id="my-dialog" popover>
        Dialog
        <button
           popovertarget="my-dialog"
           popovertargetaction="hide"
        >Close</button>
    </dialog>
    const dialog = document.querySelector('#my-dialog')
    
    dialog.addEventListener('beforetoggle', event => {
      console.log(event.newState)
    })
    
    dialog.showModal()