addEventListener для Google Maps в блестящем, чтобы автоматически закрывать информационные окна

Связанные темы

Закрытие информационных окон в Google Maps, нажав на карту?

Google Maps API закрывает информационное окно при нажатии в другом месте

Карты Google: автоматическое закрытие открытых информационных окон?

проблема

Я в состоянии нацелить все маркеры с помощью метода close и перебрать их с помощью цикла for, чтобы вручную закрыть их соответствующие информационные окна, используя:

for (var i = 0; i < mapgoogleMarkersdefaultLayerId.length; i++) {
        mapgoogleMarkersdefaultLayerId[i].infowindow.close();
      }

Однако я планирую закрыть все информационные окна, как только пользователь щелкнет где-нибудь еще на карте. Я попытался использовать addEventListener для объекта карты:

map.addEventListener("click", function(event) {
      for (var i = 0; i < mapgoogleMarkersdefaultLayerId.length; i++) {
        mapgoogleMarkersdefaultLayerId[i].infowindow.close();
      }
});

Однако использование прослушивателя на объекте карты также захватывает маркер, таким образом немедленно закрывая информационное окно, как только пользователь щелкает маркер, в результате чего ничего не происходит. Я пытался настроить таргетинг на различные "базовые слои" карты Google, используя такие вещи, как ссылки mapmap.__gm.panes.mapPane нацелить на mappanes ниже маркера без результатов.

Больше информации

Я включаю этот сценарий как другой файл в папку с блестящими приложениями и связываю его с моим приложением через includeScript("closeInfoWindows.js") в пользовательском интерфейсе.

MCVE

library(shiny)
library(googleway)

ui <- fluidPage(
  google_mapOutput(outputId = "map", height = "800px")
)

server <- function(input, output) {

  tram_stops$info <- "Make me dissappear!"
  set_key(api_key)

  output$map <- renderGoogle_map({
    google_map(data = tram_stops) %>%
      add_markers(lat = "stop_lat", lon = "stop_lon", info_window = "info")
  })
}

shinyApp(ui, server)

1 ответ

Решение

Я обновил версию для разработчиков googleway так что вы можете указать close_info_window, Если установлено TRUE, когда вы нажимаете на карту, все открытые информационные окна на маркерах закрываются.

## install the development version:
devtools::install_github("SymbolixAU/googleway")

library(googleway)  ## min version: 2.6.1002

tram_stops$info <- "Make me dissappear!"
set_key(apiKey)

google_map(data = tram_stops) %>%
  add_markers(
    info_window = "info", 
    close_info_window = T
    )

Заметка

Это в ветке разработки пакета, поэтому я могу вносить изменения без предупреждения (например, в имя аргумента). Любые изменения будут записаны на странице GitHub, касающиеся этой функции

Другие вопросы по тегам