2016-05-03 17 views
7

ile alın. Parlaklık alanlarımı daha iyi yerleştirmeme yardımcı olmak için Parlak pencere tarayıcı penceresinin boyutunu belirlemek istiyorum. Özellikle, ekran boyunca ne kadar çok yayılmam gerektiğini görmek için pencerenin en boy oranını belirlemek istiyorum ve yine de güzel görünüyor. İlk düşüncem, parsellerin sayısının floor(width/(height-navbar_height)) olacağı olurdu.Pencerenin boyutlarını Parlaklık

Bazıları bunu aradım ve şu anda olası bir çözümü bulamıyorum ve şu anda bu özelliğin clientData yapısında bulunmadığına inanıyorum. Düşüncesi olan var mı?

cevap

16

Aşağıdaki örneğe bakın. Tarayıcı pencere boyutunu (başlangıç ​​boyutu ve herhangi bir yeniden boyutlandırma) algılamak için Javascript kullanır ve verileri işlemek için sunucu koduna göndermek için Shiny.onInputChange kullanın. İlk pencere boyutunu elde etmek için shiny:connected olayını kullanır; Shiny.onInputChange, parlak olana kadar kullanım için hazır değildir. paketin htmlwidgets den JS ile parlak pencere boyutlarını almak için

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

teşekkürler. Üzgünüm kontrol etmek çok uzun sürdü. Bunun dışında sidebarPanel dışında eklemek için daha iyi bir yer olurdu görünüyor. Örneğin, fluidPage çağrısından hemen sonra. –

+0

Javascript, HTML'nin 'head' bölümünde (tag' $ head 'olarak kullandıkça)' head 'bölümünde görüneceği için Javascript'i nereye eklediğiniz önemli değildir. Html sayfasının kaynak kodunu doğrulayabilirsiniz. –

0

Kısa versiyon: Bunun

window_height <- JS('window.innerHeight') 
window_width <- JS('window.innerWidth') 
İlgili konular