如何实现Shiny中折叠Box时同步缩减宽度并分配空间?
实现Shiny Dashboard可折叠Box的宽度自适应效果
默认的collapsible = TRUE只会让Box折叠高度,要实现折叠时同时缩减宽度并让其他Box占据释放的空间,可以利用Shiny对Box折叠状态的监听,动态调整Box宽度:
library(shiny) library(shinydashboard) ui <- dashboardPage( dashboardHeader(), dashboardSidebar(), dashboardBody( column(width = 12, uiOutput("dynamic_boxes") ) ) ) server <- function(input, output) { output$dynamic_boxes <- renderUI({ # 获取box2的折叠状态,初始为未折叠(FALSE) box2_collapsed <- input$box2_collapsed %||% FALSE # 根据折叠状态设置两个box的宽度 box1_width <- if(box2_collapsed) 12 else 9 box2_width <- if(box2_collapsed) 0 else 3 tagList( box(width = box1_width, "box 1"), box(width = box2_width, "box 2", collapsible = TRUE, id = "box2") ) }) } shinyApp(ui, server)
关键说明:
- 给可折叠Box设置
id = "box2",Shiny会自动生成input$box2_collapsed输入项,实时反馈Box的折叠状态(折叠时为TRUE,展开时为FALSE) - 通过
renderUI动态渲染两个Box,根据折叠状态调整宽度:折叠时box2宽度设为0,box1占满整行12格;展开时恢复原有的9和3格宽度 %||%是Shiny内置函数,用于处理初始状态下input$box2_collapsed为NULL的情况,默认设为未折叠状态
内容的提问来源于stack exchange,提问作者Kamaloka
相关产品推荐
相关产品推荐

