2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

10行で動きをつける、モーダルウィンドウとスライドメニュー(JavaScript)

Last updated at Posted at 2024-05-19

モーダルウィンドウ

dialog要素を使うことで簡単に作れた。

dialog要素とは

HTMLの要素でモーダルダイアログやポップアップウィンドウを簡単に作成するために使用できる。
これを使うことで対話的に操作できるコンテンツをページの上に重ねて表示することができる。

index.html
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>modal</title>
  </head>

  <body>
    <button id="button">クリック</button>
    <dialog id="dialog">
        <h1>モーダルウィンドウ</h1>
        <button id="close">閉じる</button>
    </dialog>
        <script src="script.js"></script>
  </body>
</html>
script.js
const button = document.getElementById("button");
const dialog = document.getElementById("dialog");
const close = document.getElementById("close");

button.addEventListener("click", () => {
    dialog.showModal();
});

close.addEventListener("click", () => {
    dialog.close();
});

デモ

See the Pen Untitled by MK2024 (@MK2024pen) on CodePen.

CSSを指定せずにモーダルウィンドウを作ることができた。

  • 背景色の変更にはCSSでdialog::backdropで変更できる。
  • showModal()ではなくshow()を使うと他の要素も操作することができる。

スライドメニュー

ボタンを押したら左側からメニューが流れてくるものを作る。
メニューには閉じるボタンがついている。

index.html
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>slide</title>
    <link rel="stylesheet" href="style.css" />
  </head>

  <body>
    <button id="open">クリック</button>
    <div id="menu">
      <button id="close">閉じる</button>
      <h2>スライドメニュー</h2>
    </div>
    <script src="script.js"></script>
  </body>
</html>
style.css
#menu {
  position: fixed;
  top: 0;
  left: 0;
  width: 250px;
  height: 100%;
  background-color: lightgray;
  transform: translateX(-100%);
  transition: transform 0.3s ease;
}

#menu.open {
  transform: translateX(0);
}

#close {
  position: absolute;
  right: 0px;
}
script.js
const openMenuButton = document.getElementById('open');
const closeMenuButton = document.getElementById('close');
const sideMenu = document.getElementById('menu');

openMenuButton.addEventListener('click', () => {
    sideMenu.classList.add('open');
});

closeMenuButton.addEventListener('click', () => {
    sideMenu.classList.remove('open');
});

デモ

See the Pen Untitled by MK2024 (@MK2024pen) on CodePen.

  • 下記のコードを追加することでメニュー外をクリックしたら閉じるようにできる。
script.js
document.addEventListener('click', (event) => {
    if (!sideMenu.contains(event.target) && !openMenuButton.contains(event.target)) {
        sideMenu.classList.remove('open');
    }
});
2
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?