Get the size of the window in Shiny

前端 未结 2 405
难免孤独
难免孤独 2020-12-03 03:10

I Would like to determine the size of the browser window in Shiny to help me layout my plot divs better. Specifically I would like to determine the aspect ratio of the wind

相关标签:
2条回答
  • 2020-12-03 03:22

    See the example below. It uses Javascript to detect the browser window size (initial size and any resize), and use Shiny.onInputChange to send the data to the server code for processing. It uses shiny:connected event to get the initial window size, as Shiny.onInputChange is not ready for use until shiny is connected.

    library(shiny)
    
    # Define UI for application that draws a histogram
    ui <- shinyUI(fluidPage(
    
       # Application title
       titlePanel("Old Faithful Geyser Data"),
    
       # Sidebar with a slider input for number of bins 
       sidebarLayout(
          sidebarPanel(
             tags$head(tags$script('
                                    var dimension = [0, 0];
                                    $(document).on("shiny:connected", function(e) {
                                        dimension[0] = window.innerWidth;
                                        dimension[1] = window.innerHeight;
                                        Shiny.onInputChange("dimension", dimension);
                                    });
                                    $(window).resize(function(e) {
                                        dimension[0] = window.innerWidth;
                                        dimension[1] = window.innerHeight;
                                        Shiny.onInputChange("dimension", dimension);
                                    });
                                ')),
             sliderInput("bins",
                         "Number of bins:",
                         min = 1,
                         max = 50,
                         value = 30)
          ),
    
          # Show a plot of the generated distribution
          mainPanel(
             verbatimTextOutput("dimension_display"),
             plotOutput("distPlot")
          )
       )
    ))
    
    # Define server logic required to draw a histogram
    server <- shinyServer(function(input, output) {
       output$dimension_display <- renderText({
           paste(input$dimension[1], input$dimension[2], input$dimension[2]/input$dimension[1])
       })
    
       output$distPlot <- renderPlot({
          # generate bins based on input$bins from ui.R
          x    <- faithful[, 2] 
          bins <- seq(min(x), max(x), length.out = input$bins + 1)
    
          # draw the histogram with the specified number of bins
          hist(x, breaks = bins, col = 'darkgray', border = 'white')
       })
    })
    
    # Run the application 
    shinyApp(ui = ui, server = server)
    
    0 讨论(0)
  • 2020-12-03 03:39

    Shorter version for getting window dimensions in shiny with JS from package htmlwidgets:

    window_height <- JS('window.innerHeight')
    window_width <- JS('window.innerWidth')
    
    0 讨论(0)
提交回复
热议问题