我有一个 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代码。