我想在absolutePanel中使用conditionalPanel创建一个绘图,只有当我在底图上单击鼠标时才会出现。这没问题,我已经实现了。
但是,当用户越过点弹出窗口时,我想清除情节并使conditionalPanel再次崩溃。目前,当执行另一次点击时,情节会更改并重新创建数据,但是我想要链接到stripePanel的折叠,清除弹出窗口;
这个非常简单的示例显示了单击时创建的conditionalPanel(完整版创建了一个点并读取了一个栅格堆栈以绘制时间轴):
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)
有一个建议in the documentation,有一个名为mouseout的事件,但它可能只是链接到实际标记的点击,而不是maptile点击,因为我当然无法让它工作。在弹出弹出窗口后,任何使面板消失的方法都会消失?
答案 0 :(得分:4)
似乎确实popup_close
事件仍然没有在leaflet
中为R实现。
尽管如此,我们可以使用令人敬畏的htmlwidgets
包构建它。
library(htmlwidgets)
我们会使用一些javascript
来:
popupclose
&amp; popupopen
个事件。 Shiny
。 这一切都可以在onRender()
函数中完成:
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()
添加了一些渲染地图后要执行的JavaScript代码
在这种情况下,this.on('popupopen', function())
会创建事件监听器,而Shiny.onInputChange('myEvent', 'close')
会将值close
分配给input$myEvent
。
我们现在只需要更改面板的条件:
conditionalPanel("input.myEvent == 'open'", ...)