generated at
<dialog>
やや高度なmodal windowを作るためのHTML要素
window.promptなどでは物足りないときに使う

使用例
dialog.html
<dialog id="favDialog"> <form method="dialog"> <p><label>Favorite animal: <select> <option></option> <option>Brine shrimp</option> <option>Red panda</option> <option>Spider monkey</option> </select> </label></p> <menu> <button value="cancel">Cancel</button> <button id="confirmBtn" value="default">Confirm</button> </menu> </form> </dialog>
script.js
// dialog windwを作成する async function makeDialog() { const html = await fetch('/api/code/takker/<dialog>/dialog.html').then(res => res.text()); const div = document.createElement('div'); div.innerHTML = html; document.body.appendChild(div); return document.getElementById('favDialog'); } function showDialog() { const dialog = document.getElementById('favDialog') ?? makeDialog(); dialog.showModal(); } scrapbox.PageMenu.addMenu({ title: 'show dialog', image: '/assets/img/logo.png', onClick: showDialog });

Reference
<dialog> > * onClick Event.stopPropagation()を入れる
<body> をscrollさせない
css
/** dialogが開いているときは、overlayの下がスクロールされないようにする*/ body:has(dialog[open]) { overflow: hidden; }
記事だとJSで制御している
要素は適宜、scrollが発生しているものに置き換えること
scrapboxの場合、 <html> に当てないと効果がなかった

#2024-07-10 13:24:44
#2023-08-22 12:04:28
#2020-10-10 09:19:10