Автор: Stasyuk Eugene 43 Мітки: , 26.02.2024

Сьогодні розберемо як зробити google map зі списком адрес. Важлива особливість полягає в тому, що під час кліка на будь-яку з адрес, у центрі мапи має відобразитися маркер із цією адресою.

Повністю готовий і робочий варіант можна побачити тут: https://codepen.io/jecosjmecos/pen/rNRgrgg

А в самій статті вже розберемо роботу поетапно.

1) Стилі

Задаємо розміри карти на сторінці

<style>
  #map {
    height: 400px;
    width: 100%;
  }
</style>

2) Розмітка списку з адресами

Обгортка зі списком повинна мати id='address'

<ul id="address">
  <li>
    <a href="#"
       data-lat="51.52997244138653"
       data-lng="-0.1721165694782623">
      <span class="address">
        St John's Wood Rd, London NW8 8QN, Great Britain
      </span>
      <span class="link">Directions</span>
    </a>
 </li>

  <li>
    <a href="#"
       data-lat="13.731994255241341"
       data-lng="100.54166799585914">
      <span class="address">
        Lumphini, Pathum Wan, Bangkok 10330, Thailand
      </span>
      <span class="link">Directions</span>
    </a>
  </li>

  <li>
    <a href="#"
       data-lat="35.72016405570121"
       data-lng="139.76076052276977">
      <span class="address">
        1 Chome-28-9 Nezu, Bunkyo City, Tokyo 113-0031, Japan
      </span>
      <span class="link">Directions</span>
    </a>
  </li>
</ul>

Важный момент! Посилання (тег <a>) має два атрибути: data-lat и data-lng . У цих атрибутах ми використовуємо координати, які потім будуть відображатися на карті.

Щоб їх отримати, достатньо на відкритій google карті клікнути правою кнопкою миші на точку, після чого буде доступне вікно з опціями, першим пунктом якого є координати.

3) Область із картою

Додаємо елемент з id='map'. Вміст блоку буде заповнено картою

<div id="map"></div>

4) Основний скрипт

Цей скрипт:

  • Зчитує координати адрес у нашому списку
  • Додає маркери цих адрес на карту
  • При кліку на одну з адрес відображає її в центрі карти

Щоб скрипт працював, потрібно в консолі google створити api key і вставити його в посиланні замість YOUR_API_KEY у script.src у функції initMap(). Як створити ключ можна подивитися тут:

<script>
  document.addEventListener('DOMContentLoaded', async function(){

      const mapList = document.querySelectorAll('#address li a');

      if(mapList.length){
          await initMap(mapList);

          mapList.forEach((item) => {

              item.addEventListener('click', function(e){
                  e.preventDefault();

                  addMarker(+this.dataset.lat, +this.dataset.lng);
              });

          });
      }
  });

  async function initMap(coordinates) {
      return new Promise((resolve, reject) => {
          const script = document.createElement('script');
          script.src = `https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMapCallback`;
          script.defer = true;
          script.async = true;
          window.initMapCallback = function() {
              const map = new google.maps.Map(document.getElementById("map"), {
                  center: { lat: -10.397, lng: 155.644 },
                  zoom: 16,
                  mapTypeControl: false,
                  streetViewControl: false,
              });

              window.map = map;

              coordinates.forEach((coordinate) => {
                  addMarker(+coordinate.dataset.lat, +coordinate.dataset.lng, map);
              });

              resolve();
          };

          document.head.appendChild(script);
      });
  }

  function addMarker(lat, lng, map = false) {
      map = map ? map : window.map;

      const marker = new google.maps.Marker({
          position: { lat: lat, lng: lng },
          map: map,
      });

      map.setCenter({ lat: lat, lng: lng });
  }
</script>

Інші статті

Якірні посилання та фіксований header

Якірні посилання та фіксований header

Якірні посилання та фіксований header

Останнім часом я вже давно не зустрічав сайтів, які мають статичний header. Практично всі фіксують його вгорі вікна. Щонайменше дуже зручно, коли навігація сайтом завжди знаходиться під рукою. Але є один момент, який може спричинити дискомфорт за такого підходу – це якірні посилання. Зазвичай під час кліка на таке посилання, секція із зазначеним Id опиняється […]

Як перекласти тему WordPress іншою мовою перевод

Як перекласти тему WordPress іншою мовою

Як перекласти тему WordPress іншою мовою

Працюючи над створенням теми на WordPress, ми досить часто стикаємося з такими написами як “завантажити ще, автор, мітки” і т.д. Наприклад, як у моєму блозі: Добре, коли сайт однією мовою. Тоді з ними робити нічого і не потрібно. Але що робити, коли сайт мультимовний. Якщо замовнику в переспективі немає потреби у майбутньому змінювати їх назви, […]