2016-05-03 31 views
7

में विंडो के आकार जाओ मैं मदद करने के लिए मुझे लेआउट मेरी साजिश बेहतर divs चमकदार में ब्राउज़र विंडो के आकार निर्धारित करने के लिए करना चाहते हैं। विशेष रूप से मैं खिड़की के पहलू अनुपात को निर्धारित करना चाहता हूं कि स्क्रीन पर मुझे कितने divs फैलाना चाहिए और यह अभी भी अच्छा लग रहा है। मेरा प्रारंभिक विचार यह होगा कि भूखंडों की संख्या floor(width/(height-navbar_height)) होगी।चमकदार

मैं कुछ इस की तलाश और मैं वर्तमान में एक संभव समाधान का पता लगाने में असमर्थ हूँ और वर्तमान में विश्वास है कि इस सुविधा के लिए बस clientData संरचना में मौजूद नहीं है नेतृत्व कर रहा हूँ था। कोई विचार?

उत्तर

16

नीचे दिए गए उदाहरण देखें। यह ब्राउज़र विंडो आकार (प्रारंभिक आकार और किसी भी आकार) का पता लगाने, और Shiny.onInputChange का उपयोग प्रसंस्करण के लिए सर्वर कोड को डेटा भेजने के लिए जावास्क्रिप्ट का उपयोग करता है। यह shiny:connected घटना का उपयोग करता प्रारंभिक विंडो का आकार प्राप्त करने के लिए, के रूप में Shiny.onInputChange तक चमकदार जुड़ा हुआ है उपयोग के लिए तैयार नहीं है। पैकेज htmlwidgets से JS साथ चमकदार में खिड़की आयाम प्राप्त करने के लिए

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

यह कोई फर्क नहीं पड़ता है जहाँ आप जावास्क्रिप्ट हालांकि जोड़ने के लिए, के रूप में जावास्क्रिप्ट परवाह किए बिना HTML के 'head' अनुभाग में दिखाई देगा (जैसा कि हम' टैग $ head' प्रयुक्त)। आप एचटीएमएल पेज के स्रोत कोड को सत्यापित कर सकते हैं। –

0

छोटा संस्करण:

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