conditionalPanel
是一个方便的方法来包装一个返回布尔值的javascript表达式,以显示或隐藏HTML对象。是否有更普遍的事情暴露input
?如果没有,为什么不呢?
假设您有一个要手动淡出的滑块和绘图。拥有一个函数比较方便,比如说jsExpr
,并写下类似的东西:
sliderInput("opacity", "Opacity", min=0, max=0.5, value=0.2, step=.1),
div(style=paste0('opacity:',jsExpr("input.opacity*2")), plotOutput("myPlot"))
在这里,我已经在表达式中添加了*2
,只是为了强调我想使用来自input
的任意计算值。如果conditionalPanel
可以根据布尔javascript表达式显示/隐藏,为什么不更一般地如上所述?
使用shinyjs,最好的替代解决方案似乎要复杂得多。例如:
library(shiny)
library(shinyjs)
adjustOpacity <- "shinyjs.adjustOpacity = function(params) {
$('.myplot').css('opacity',params)
}"
ui <- fluidPage(
useShinyjs(),
extendShinyjs(text=adjustOpacity),
sliderInput("opacity", "Opacity", min=0, max=0.5, value=0.2, step=.1),
div(class="myplot", plotOutput("myPlot"))
)
server <- function(input, output) {
output$myPlot <- renderPlot({ plot(faithful, pch=15) })
observeEvent(input$opacity, {
js$adjustOpacity(input$opacity*2)
})
}
shinyApp(ui = ui, server = server)