首页 > 解决方案 > 使用shinyjs延迟将rednderUI /播放音频延迟计算的毫秒数

问题描述

我正在尝试使用包中的以下delay代码shinyjs。我期望的是在运行应用程序的预定义时间(本例中为 5 秒)后显示模态并播放音频。我只能看到模态但没有播放音频。关于什么可能是错的任何指导?

谢谢你



library(shiny)
 
library(shinyjs)
 
ui <- fluidPage(
  useShinyjs(),
  h2(textOutput("currentTime")),
  br(),
  br(),
  h2(textOutput("target1")),
  h2(textOutput("till1")), 
  uiOutput('my_audio1')
 
)



server <- function(input, output, session) {
  
  
  
  output$currentTime <- renderText({
    invalidateLater(1000, session)
    paste("The current time is", format(Sys.time(), "%H:%M"))
  })
  
  t1 <- isolate({
    Sys.time() + 5
    
  })
 
  
  output$target1 <- renderText({
    
    paste("Target", t1)
  })
 
  
  output$till1 <- renderText({
    invalidateLater(1000, session)
    
    paste("Seconds till target:", round (t1-Sys.time()))
  })
 
  
  sys1 = isolate({
    Sys.time()
  })
  
  observe({
    print(sys1)
    print(t1)
    print(t1-sys1)
    print(as.numeric(t1-sys1, units = "secs")*1000)
  })
  
  
    
  observe ({
    delay (as.numeric(t1-sys1, units = "secs")*1000, 
           showModal(modalDialog(
             title = "",
             "Audio should play now"))  
    )
  })
  
 
  
  observe({
    delay (as.numeric(t1-sys1, units = "secs")*1000, 
  output$my_audio1 <-renderUI({
               tags$audio(src = "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-3.mp3", 
                          type = "audio/mp3", autoplay = NA, controls = NA, style="display:none;")
    })
  )
  })
  
  
 
}

# Create Shiny app ----
shinyApp(ui, server)


更新: 现在,音频文件会从笔记本电脑浏览器自动播放,但不会从手机 safari 浏览器自动播放。看起来这是几乎所有移动浏览器的问题(他们禁用了音频自动播放)。我试图在下面更新的代码中实现这个技巧,但它仍然无法正常工作R闪亮不自动播放音频

关于从那里去哪里有什么建议吗?

我读到了一个新包shinyMobile,它可以为闪亮的应用程序添加渐进式 Web 应用程序功能。您是否认为这可以解决问题以及所有延迟/预定的音频在移动设备上自动播放?

谢谢你


library(shiny)

library(shinyjs)

ui <- fluidPage(
  useShinyjs(),
  h2(textOutput("currentTime")),
  tags$audio(src = "https://olafwempe.com/mp3/silence/silence.mp3",type = "audio/mp3", autoplay = TRUE),
  br(),
  br(),
  h2(textOutput("target1")),
  h2(textOutput("till1")), 
  actionButton("play", "Start"), 
  uiOutput('my_audio1')
)



server <- function(input, output, session) {
  
  output$currentTime <- renderText({
    invalidateLater(1000, session)
    paste("The current time is", format(Sys.time(), "%H:%M"))
  })
  
  t1 <- isolate({
 
    Sys.time() + 5
    
  })
  
  
  output$target1 <- renderText({
 
    paste("Target", t1)
  })
  
  
  output$till1 <- renderText({
 
    invalidateLater(1000, session)
    
    paste("Seconds till target:", round (t1-Sys.time()))
  })
  
  
  sys1 = isolate({
     Sys.time()
  })
  
  
  observeEvent(input$play, {
    print(sys1)
    print(t1)
    print(t1-sys1)
    print(as.numeric(t1-sys1, units = "secs")*1000)
  })
  
  
observeEvent (input$play, {
 delay (as.numeric(t1-sys1, units = "secs")*1000,
       showModal(modalDialog(
        title = "",
       "Audio should play now"))
 )
 })

  
  
  
  observeEvent(input$play, {
    delay (as.numeric(t1-sys1, units = "secs")*1000, 
           output$my_audio1 <-renderUI({ 
             tags$audio(src = "http://soundbible.com/grab.php?id=2213&type=mp3", 
                        type = "audio/mp3", autoplay = TRUE)
           })
    )
  })
  
 
  
  observeEvent(input$play, {
    delay ((as.numeric(t1-sys1, units = "secs")+20) *1000, 
           output$my_audio1 <-renderUI({ 
             tags$audio(src = "https://www.soundhelix.com/examples/mp3/SoundHelix-Song-2.mp3", 
                        type = "audio/mp3", autoplay = TRUE)
           })
    )
  })
  
  
}

# Create Shiny app ----
shinyApp(ui, server)







 

标签: rshinyshinyjs

解决方案


推荐阅读