[英]How to collapse sidebarPanel in shiny app?
我有一個閃亮的應用程序,在導航欄頁面的 tabPanel 內有一個 mainPanel 和一個 sidebarPanel。 我需要一個選項來隱藏類似於以下內容的側邊欄面板: 在 Shinydashboard和https://github.com/daattali/shinyjs/issues/43 中默認隱藏側邊欄。
actionButton 應該控制 sidebarPanel 是顯示還是折疊。
這是代碼:
library(shiny)
library(shinyjs)
ui <- fluidPage(
navbarPage("",
tabPanel("tab",
sidebarPanel(
useShinyjs()
),
mainPanel(actionButton("showSidebar", "Show sidebar"),
actionButton("hideSidebar", "Hide sidebar")
)
)
)
)
server <-function(input, output, session) {
observeEvent(input$showSidebar, {
shinyjs::removeClass(selector = "body", class = "sidebarPanel-collapse")
})
observeEvent(input$hideSidebar, {
shinyjs::addClass(selector = "body", class = "sidebarPanel-collapse")
})
}
shinyApp(ui, server)
希望有人能幫忙:)
我已修改您的代碼以隱藏和顯示側邊欄。 為了創建sidebarPanel
的id
,我將它包含在 div 中並賦予它id = Sidebar
。 為了顯示和隱藏側邊欄,我使用了shinyjs
函數show
和hide
,ID 為Sidebar
。
library(shiny)
library(shinyjs)
ui <- fluidPage(
useShinyjs(),
navbarPage("",
tabPanel("tab",
div( id ="Sidebar",sidebarPanel(
)),
mainPanel(actionButton("showSidebar", "Show sidebar"),
actionButton("hideSidebar", "Hide sidebar")
)
)
)
)
server <-function(input, output, session) {
observeEvent(input$showSidebar, {
shinyjs::show(id = "Sidebar")
})
observeEvent(input$hideSidebar, {
shinyjs::hide(id = "Sidebar")
})
}
shinyApp(ui, server)
希望能幫助到你!
先前評論中建議的切換選項示例。
library(shiny)
library(shinyjs)
ui <- fluidPage(
useShinyjs(),
navbarPage("",
tabPanel("tab",
div( id ="Sidebar",sidebarPanel(
)),
mainPanel(actionButton("toggleSidebar", "Toggle sidebar")
)
)
)
)
server <-function(input, output, session) {
observeEvent(input$toggleSidebar, {
shinyjs::toggle(id = "Sidebar")
})
}
shinyApp(ui, server)
我用導航欄和多個選項卡上的切換按鈕做了一個例子。
library(shiny)
library(shinyjs)
ui <- fluidPage(
useShinyjs(),
navbarPage(title = tagList("title",actionLink("sidebar_button","",icon = icon("bars"))),
id = "navbarID",
tabPanel("tab1",
div(class="sidebar"
,sidebarPanel("sidebar1")
),
mainPanel(
"MainPanel1"
)
),
tabPanel("tab2",
div(class="sidebar"
,sidebarPanel("sidebar2")
),
mainPanel(
"MainPanel2"
)
)
)
)
server <-function(input, output, session) {
observeEvent(input$sidebar_button,{
shinyjs::toggle(selector = ".sidebar")
})
}
shinyApp(ui, server)
========================================
我創建了一個不使用 sidepanel 類的更簡單的示例,但我不確定它是否適用於所有環境。
library(shiny)
library(shinyjs)
ui <- fluidPage(
useShinyjs(),
navbarPage(title = tagList("title",actionLink("sidebar_button","",icon = icon("bars"))),
tabPanel("tab1",
sidebarPanel("sidebar1"),
mainPanel("MainPanel1")
),
tabPanel("tab2",
sidebarPanel("sidebar2"),
mainPanel("MainPanel2")
)
)
)
server <-function(input, output, session) {
observeEvent(input$sidebar_button,{
shinyjs::toggle(selector = ".tab-pane.active div:has(> [role='complementary'])")
})
}
shinyApp(ui, server)
========================================
我終於完成了我的可折疊側邊欄面板,並且當側欄面板折疊時,shinyjs runjs 允許您擴展主面板的寬度。
library(shiny)
library(shinyjs)
ui <- fluidPage(
useShinyjs(),
navbarPage(title = tagList("title",actionLink("sidebar_button","",icon = icon("bars"))),
tabPanel("tab1",
sidebarPanel("sidebar1",width=3),
mainPanel("MainPanel1",width=9,style="background-color:gray")
),
tabPanel("tab2",
sidebarPanel("sidebar2",width=5)
,mainPanel("MainPanel2",width=7,style="background-color:gray")
)
)
)
server <-function(input, output, session) {
observeEvent(input$sidebar_button,{
shinyjs::toggle(selector = ".tab-pane.active div:has(> [role='complementary'])")
js_maintab <- paste0('$(".tab-pane.active div[role=',"'main'",']")')
runjs(paste0('
width_percent = parseFloat(',js_maintab,'.css("width")) / parseFloat(',js_maintab,'.parent().css("width"));
if (width_percent == 1){
',js_maintab,'.css("width","");
} else {
',js_maintab,'.css("width","100%");
}
'))
})
}
shinyApp(ui, server)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.