2017-03-03 4 views
1

Ich möchte ein Diagramm im AbsolutePanel erstellen, indem ich ein ConditionalPanel verwende, das nur erscheint, wenn ich mit der Maus auf die Grundkarte klicke. Das ist kein Problem und das habe ich erreicht.Shiny Leaflet Ausblenden eines Bedingungsfensters mit einem Mausklick-Ereignis

Aber ich möchte, dass der Plot gelöscht wird und das conditionalPanel wieder minimiert wird, sobald der Benutzer das Punkt-Popup-Fenster überquert. Im Moment ändert und plottet der Plot Daten, wenn ein anderer Klick ausgeführt wird, aber es ist das Löschen des Pop-Ups, das ich mit dem Collapsing des ConditionalPanel verknüpfen möchte;

Dieses sehr einfache Beispiel die Schaffung des conditionalPanel auf Klick zeigt (die Vollversion erstellt einen Punkt und liest ein Raster Stapel eine Zeitleiste plotten):

ui <- bootstrapPage(
    tags$style(type = "text/css", "html, body {width:100%;height:100%}"), 
    leafletOutput("map", width="100%", height="100%"), 
    absolutePanel(class = "panel panel-default", fixed = TRUE,draggable = TRUE, 
       top = 20, left = 60, 

       conditionalPanel("input.map_click", 
        h4(textOutput("Click_text")), 
       top=20, left=60, height=400, width=200, 
       style="padding-left: 10px; padding-right: 8px; padding-top: 8px; padding-bottom: 8px") 
) 
) 


server <- function(input, output, session) { 

    output$map <- renderLeaflet({ 
    leaflet() %>% 
     setView(-4,52.5,9) %>% 
     addProviderTiles(providers$CartoDB.Positron) 
    }) 

    observeEvent(input$map_click, { 
    click <- input$map_click 
    text<-paste("Lattitude ", click$lat, "Longtitude ", click$lng) 
    text2 <- paste("YOUVE CLICKED THE MAP!!!",click$lat, click$lng) 

    proxy <- leafletProxy("map") 
    proxy %>% clearPopups() %>% 
     addPopups(click$lng, click$lat, text) 

    output$Click_text<-renderText({text2}) 
    }) 

} 

runApp(shinyApp(ui, server), launch.browser = TRUE) 

Es ist ein Vorschlag in the documentation, dass es eine ist Dieses Ereignis wurde Mouseout genannt, aber es könnte nur mit Klicks auf tatsächliche Marker im Gegensatz zu den Maptile Klicks verknüpft werden, da ich es sicherlich nicht zum Laufen bringen konnte. Gibt es eine Möglichkeit, das Panel nach dem Überfahren des Pop-ups verschwinden zu lassen?

+0

Nach [dieser] (https://github.com/rstudio/leaflet/issues/183) link popupclose Veranstaltung‘ Es scheint, als wären sie glänzend umgesetzt. – SBista

+0

danke für den Link, ich würde vorsichtig sein, etwas von 2015 zu nehmen, um immer noch der Fall für Shiny in R zu sein, wie ich 2016 große Sprünge bewegt, aber danke für die flagge es – Sam

Antwort

4

Es scheint in der Tat, dass das popup_close Ereignis noch nicht in leaflet für R. implementiert

Trotzdem wir es mit dem genial htmlwidgets Paket bauen.

library(htmlwidgets) 

werden wir einige javascript verwenden:

  • den popupclose & popupopen Ereignisse hören.
  • senden Sie die Informationen, dass die Ereignisse passiert sind.

    output$map <- renderLeaflet({ 
         leaflet() %>% 
          setView(-4,52.5,9) %>% 
          addProviderTiles(providers$CartoDB.Positron) %>% 
    
          onRender(" 
            function(el, x) { 
             this.on('popupopen', function(e) { 
              Shiny.onInputChange('myEvent', 'open'); 
             }); 
    
             this.on('popupclose', function(e) { 
              Shiny.onInputChange('myEvent', 'close'); 
             }); 
            }") 
        }) 
    

    onRender() fügt einige Javascript-Code ausgeführt werden, sobald die Karte wiedergegeben wird:

Dies alles kann in der onRender() Funktion erreicht werden.
In diesem Fall this.on('popupopen', function()) den Ereignis-Listener erstellen, während Shiny.onInputChange('myEvent', 'close') den Wert closeinput$myEvent zuweist.

Wir müssen jetzt nur noch die Bedingung für das Panel ändern: es doesn

conditionalPanel("input.myEvent == 'open'", ...) 
+0

das ist super danke, funktioniert perfekt für eine Klicken Sie auf Ereignis. Jetzt versuche ich, die drawToolbar-Funktionen von leaflet.extras, insbesondere den DELETESTOP-Listener, zu integrieren, um Graphen zu löschen, wenn eine gezeichnete Form gelöscht wird. – Sam

Verwandte Themen