我有一个 Shiny 的加载微调器,其实现方式类似于t his answer:

conditionalPanel(condition="$('html').hasClass('shiny-busy')",
                 tags$div("Loading...",id="loadmessage")
)



runApp(list(
  ui = pageWithSidebar(
      headerPanel("Test"),
         sidebarPanel(
           tags$head(tags$style(type="text/css", "
             #loadmessage {
               position: fixed;
               top: 0px;
               left: 0px;
               width: 100%;
               padding: 5px 0px 5px 0px;
               text-align: center;
               font-weight: bold;
               font-size: 100%;
               color: #000000;
               background-color: #CCFF66;
               z-index: 105;
             }
          ")),
           numericInput('n', 'Number of obs', 100),
           conditionalPanel(condition="$('html').hasClass('shiny-busy')",
                            tags$div("Loading...",id="loadmessage"))
         ),
         mainPanel(plotOutput('plot'))
  ),
  server = function(input, output) {
    output$plot <- renderPlot({ Sys.sleep(2); hist(runif(input$n)) })
  }
))

我遇到的问题是,即使 Shiny 的时间仅占一小部分,加载程序也会一直启动。这导致应用程序始终闪烁。有没有一种方法可以在条件面板上设置一个基本的延迟,以便微调器仅在页面忙一秒钟后才出现?

最佳答案

我遇到了这个包:shinysky。 (here's the github)

它具有busyIndicator元素,您可以设置它在显示之前应等待的时间,您可以将busyIndicator(wait=1000)添加到ui.R中。

您还可以通过在R中运行busyIndicator来查看该函数的代码,这基本上是一些使用setTimeout的js代码。

07-28 12:52