R shiny:根据输入更改背景颜色

R shiny : change background color based on input

我是 R shiny 的新手,我有以下内容 ui:

ui <- shinyUI(fluidPage(
    titlePanel(textOutput("title")),
    selectInput("tool", "Choose your tool",
                choices = c("Tool 1", "Tool 2",
                            "Tool 3"),
                selected = "Tool 1", multiple = FALSE
                )
)
)

我想做的是根据select输入“工具”的结果改变整个网页的背景颜色。例如,如果用户 select 的“工具 1”,背景颜色将为红色;如果用户 select 的“工具 2”,背景颜色将为橙色,依此类推。

谢谢

我相信有更好的方法可以做到这一点,但这个解决方案有效。这个想法是在每次 input$tools 更改时渲染一个 UI,以便可以修改 tags$style。

library(shiny)
library(tidyverse)

ui <- fluidPage(
    selectInput("tool", "Choose your tool",
                choices = c("Tool 1", "Tool 2",
                            "Tool 3"),
                selected = "Tool 1", multiple = FALSE),
    
    uiOutput('background_change') )


server <- function(input, output, session) {
    
    bg <- reactive({
        case_when(input$tool =='Tool 1' ~ 'body {
                                             background-color: red;
                                             color: white;
                                        }',
                  input$tool =='Tool 2' ~ 'body {
                                            background-color: orange;
                                            color: white;
                                        }',
                  input$tool =='Tool 3' ~ 'body {
                                            background-color: brown;
                                            color: white;
                                        }',
      TRUE  ~ 'body {
                background-color: red;
                color: white;
                }')
    })
    
    
    
    output$background_change <- renderUI({
        tagList(fluidPage(tags$style(HTML(bg()))))
    })
    
}

shinyApp(ui, server)