ドキュメントを検索

ハウツー クリックでポップアップを出すには

マーカーをクリックしたときに情報をポップアップで表示します。

コード

.geoloniadiv の中に HTML を書くと、それがマーカーのポップアップになります。

<style>
  .geolonia { width: 100%; height: 100vh; }
</style>

<div class="geolonia"
     data-lat="35.681236" data-lng="139.767125"
     data-zoom="15">
  <strong>東京駅</strong><br>JR・地下鉄各線
</div>

<script src="https://cdn.geolonia.com/embed/v5/embed?geolonia-api-key=YOUR-API-KEY"></script>
  • div の子要素がそのままポップアップの内容です。HTML なので、太字やリンク、画像なども使えます。
  • 子要素を書くと中心にマーカーが立ち、クリックでポップアップが開きます。
  • embed のポップアップは中心の1つのマーカーだけに付けられます。複数のマーカーそれぞれにポップアップを付けたい場合は suite や react を使ってください。

画像つきのポップアップを複数置く

ポップアップの中身は HTML なので、<img> を書けば写真やサムネイルが入ります。ここでは3つの地点それぞれに、名前・説明・画像を載せたポップアップを付けます。

ひとつだけ注意があります。ポップアップの最大幅は既定で 240px です。原寸のまま画像を入れると枠からはみ出すので、画像側で幅を決めてください(下の例では width: 100% を効かせています)。

属性だけで書けるポップアップは中心の1つに限られますが、embed の JavaScript API を使えば複数の地点に付けられます。

<style>
  body { margin: 0; }
  #map { width: 100%; height: 100vh; }
  .spot-popup img { width: 100%; display: block; margin-top: 6px; }
</style>

<div id="map" data-lat="35.68" data-lng="139.75" data-zoom="11" data-marker="off"></div>

<script src="https://cdn.geolonia.com/embed/v5/embed?geolonia-api-key=YOUR-API-KEY"></script>
<script>
  const spots = [
    { name: "東京駅", note: "JR・地下鉄各線", lng: 139.767125, lat: 35.681236 },
    { name: "新宿駅", note: "JR・私鉄・地下鉄各線", lng: 139.700258, lat: 35.690921 },
    { name: "渋谷駅", note: "JR・私鉄・地下鉄各線", lng: 139.701636, lat: 35.658034 },
  ];

  const map = new geolonia.Map("#map");

  for (const spot of spots) {
    const popup = new geolonia.Popup({ className: "spot-popup" }).setHTML(`
      <strong>${spot.name}</strong><br>${spot.note}
      <img src="/geolonia-icon.png" alt="${spot.name}">
    `);

    new geolonia.Marker().setLngLat([spot.lng, spot.lat]).setPopup(popup).addTo(map);
  }
</script>
  • geolonia.Popup / geolonia.Marker:embed を読み込むと window.geolonia に MapLibre GL JS の中身が入るので、ポップアップとマーカーのクラスをそのまま使えます。
  • setPopup():マーカーにポップアップを結び付けます。クリックで開く動きは MapLibre が受け持つので、リスナーは書きません。
  • className:ポップアップの外枠に付くクラス名です。<style> から内部の画像を指定するときに使用します。
  • data-marker="off":中心のマーカーを消しています。付けないと、ポップアップを持たないマーカーが1本余ります。

上の例の src は、このサイトに置いたサンプル画像(/geolonia-icon.png)を指しています。自分のサイトの画像に差し替えるときは、ルートからの絶対パス/img/tokyo-station.jpg)か絶対 URLhttps://example.com/tokyo-station.jpg)で書いてください。ポップアップの HTML はページのどこからでも同じ文字列として使われるので、相対パスにするとページによって解決先が変わります。

結果

上のコードは、それぞれのタブの下でそのまま動いています。マーカーをクリックするとポップアップが開きます。画像つきの例では、3つのマーカーそれぞれに画像入りのポップアップが開きます。

うまくいかないとき
  • マーカーが出ない → 属性だけで書いているときは data-marker="off" が付いていないか確認。中心のマーカーを消すと、ポップアップも開かなくなります。
  • ポップアップが空 → div の子要素が空になっていないか確認。空白文字だけではポップアップは開きません。
  • クリックしても何も出ない → div タグの閉じ忘れに注意。<div class="geolonia" ...>内容</div> と正しく閉じてください。
  • 画像がはみ出す・切れる → ポップアップの最大幅は既定で 240px です。画像に width: 100% を効かせてください。
  • 画像が出ない → src のパスを確認。相対パスはページの場所によって解決先が変わるので、絶対パスか絶対 URL で書きます。