添加一个闪亮的面板,按时消失

时间:2015-11-04 11:16:59

标签: r shiny

我需要在我闪亮的应用程序中放置一个文本面板,它在启动后10秒消失(就像一个建议),任何人都知道它是否可行?我尝试使用命令" invalidLater",但它总是会再次显示。

由于

Louro,J。

1 个答案:

答案 0 :(得分:1)

正如@bunk显示一个好方法是使用invalidateLater,这里有一些例子:

library(shinyjs)

ui <- shinyUI(
  fluidPage(
    tags$head(
      tags$script(
        HTML(
          '
          Shiny.addCustomMessageHandler("registerTimer", function(message){
            console.log("Timer registered for $("+message.selector+")with delay "+message.delay);
            setTimeout(removeElementFromDOM, message.delay, message.selector);
          });

          function removeElementFromDOM(selector){
            $("#"+selector).remove();
          }
          '
        )
      )
    ),
    uiOutput("ui1"),
    textOutput("ui2"),
    plotOutput("plt1"),
    div(id="txtDiv","Some text here")
  )
)

rm(active) 
server <- shinyServer(function(input,output, session){
  data <- data.frame("x"=runif(10),"y"=runif(10))
  txt1 <- "Some text"
  makeReactiveBinding('txt1')
  makeReactiveBinding('data')

  # Remove with javascript
  session$sendCustomMessage('registerTimer',
    message=list(selector='txtDiv',delay=4000))

  # Hide with shinyjs
  output$plt1 <- renderPlot({
    if (is.null(data)){
      hide("plt1")
    } else{
      plot(x~y,data)
    }
  })
  output$ui2 <- renderText({
    txt1
  })

  # Continously update, output nothing after time
  output$ui1 <- renderUI({
    invalidateLater(1000, session); 
    if ((active <<- exists('active'))) return()
    div("Text here")
  })

  # Triggers change
  reactiveTimer(2000,{
    txt1 <- NULL
  })

  reactiveTimer(3000,{
    data <- NULL
  })

})

shinyApp(ui=ui,server=server)

ui1使用invalidateLater方法,ui2使用设置为NULL的无效值,plt1是ui2的变体,其中shinyjs用于隐藏plotOutput。

<强>被修改

我已经为此添加了一个Javascript解决方案,您可以在DOM的任何元素上使用它。