Reputation: 581
Is it possible to use panels with navbarPage
, navlistPanel
, navbarMenu
or tabsetPanel
without showing the navigation menu?
I wrote the following script:
library(shiny)
library(shinyjs)
ui <- fluidPage(
useShinyjs(),
navbarPage
(
title = NULL, id = "navBar",
tabPanel
(
title = "01", value = "panel01",
h1("First panel", align = "center"),
actionButton("next01", "Next", width = "10%")
),
tabPanel
(
title = "02", value = "panel02",
h1("Second panel", align = "center"),
actionButton("prev02", "Previous", width = "10%")
)
)
)
server <- function(input, output, session)
{
observe(
{
hide(selector = "#navBar li a[data-value=panel02]")
})
observeEvent(input$next01,
{
hide(selector = "#navBar li a[data-value=panel01]")
show(selector = "#navBar li a[data-value=panel02]")
updateNavbarPage(session, "navBar", selected="panel02")
})
observeEvent(input$prev02,
{
hide(selector = "#navBar li a[data-value=panel02]")
show(selector = "#navBar li a[data-value=panel01]")
updateNavbarPage(session, "navBar", selected="panel01")
})
}
shinyApp(ui = ui, server = server)
Since I have a 'previous' and 'next' button at the bottom of each panel, I don't need the menu and would like to get rid of the navigation menu on top of each panel.
Upvotes: 0
Views: 867
Reputation: 7704
As mentioned in the comment to hide the navigation menu you can add hide(selector = "#navBar")
inside your observe.
To get rid of the gray background of the navigation bar you can add the following css tag in your ui:
tags$style(type='text/css', "nav.navbar.navbar-default.navbar-static-top{border-color: #f5f5f5;background-color: #f5f5f5;}")
To further decrease the height of the navigation bar you can add the following two css tags:
tags$style(type='text/css', ".navbar{min-height: 0px; margin-bottom: 0px;}")
tags$style(type='text/css', ".navbar-brand{height: 0px; padding: 0px 0px;}")
So adding all these your code will look as follows:
library(shiny)
library(shinyjs)
ui <- fluidPage(
useShinyjs(),
tags$style(type='text/css', "nav.navbar.navbar-default.navbar-static-top{border-color: #f5f5f5;background-color: #f5f5f5;}"),
tags$style(type='text/css', ".navbar{min-height: 0px; margin-bottom: 0px;}"),
tags$style(type='text/css', ".navbar-brand{height: 0px; padding: 0px 0px;}"),
navbarPage
(
title = NULL, id = "navBar",
tabPanel
(
title = "01", value = "panel01",
h1("First panel", align = "center"),
actionButton("next01", "Next", width = "10%")
),
tabPanel
(
title = "02", value = "panel02",
h1("Second panel", align = "center"),
actionButton("prev02", "Previous", width = "10%")
)
)
)
server <- function(input, output, session)
{
observe(
{
hide(selector = "#navBar li a[data-value=panel02]")
hide(selector = "#navBar")
})
observeEvent(input$next01,
{
hide(selector = "#navBar li a[data-value=panel01]")
show(selector = "#navBar li a[data-value=panel02]")
updateNavbarPage(session, "navBar", selected="panel02")
})
observeEvent(input$prev02,
{
hide(selector = "#navBar li a[data-value=panel02]")
show(selector = "#navBar li a[data-value=panel01]")
updateNavbarPage(session, "navBar", selected="panel01")
})
}
# Run the application
shinyApp(ui = ui, server = server)
Hope it helps!
Upvotes: 4