Je voudrais déterminer la taille de la fenêtre du navigateur dans Shiny pour m'aider à mieux mettre en forme mon div divs. Plus précisément, je voudrais déterminer le rapport hauteur/largeur de la fenêtre pour voir combien de div je dois étaler sur l’écran et cela a toujours l’air agréable. Ma pensée initiale serait que le nombre de parcelles serait floor(width/(height-navbar_height))
.
J'en ai fait quelques recherches et je suis actuellement incapable de trouver une solution possible et je suis actuellement amené à croire que cette fonctionnalité n'est tout simplement pas présente dans la structure clientData. Des pensées?
Voir l'exemple ci-dessous. Il utilise Javascript pour détecter la taille de la fenêtre du navigateur (taille initiale et tout redimensionnement éventuel) et utilise Shiny.onInputChange
pour envoyer les données au code du serveur pour traitement. Il utilise l'événement shiny:connected
pour obtenir la taille initiale de la fenêtre, car Shiny.onInputChange
n'est pas prêt à être utilisé jusqu'à ce que shiny soit connecté.
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)
Version plus courte pour obtenir les dimensions de fenêtre en brillant avec JS
à partir du paquetage htmlwidgets
:
window_height <- JS('window.innerHeight')
window_width <- JS('window.innerWidth')