据我所知你需要放弃renderUI
为了这个工作。否则id
当您尝试立即降低音量时,您的音频标签将不存在(请参阅浏览器的控制台以获取相应的错误消息)。
我建议您仅生成一次音频标签,并降低应用程序或会话启动时的音量,同时动态更改src
音频标签的参数。
请参阅以下内容:
library(shiny)
library(shinyjs)
if(!dir.exists("www")){
dir.create("www")
}
if(!file.exists("./www/Flamenco.ogg")){
# for license see: https://commons.wikimedia.org/wiki/File:JCZA_-_JCzarnecki-Flamenco.ogg
download.file("https://upload.wikimedia.org/wikipedia/commons/7/76/JCZA_-_JCzarnecki-Flamenco.ogg", destfile = "./www/Flamenco.ogg", mode = "wb")
}
ui <- fluidPage(
useShinyjs(),
tags$audio(id = "myaudio", controls = NA, autoplay = NA, src = ""),
p(),
actionButton("guessbutton", "Submit")
)
server <- function(input, output) {
runjs("document.getElementById('myaudio').volume = 0.2;") # initially reduce volume
observeEvent(input$guessbutton, {
runjs(sprintf("document.getElementById('myaudio').src = '%s';", "Flamenco.ogg")) # dynamically change src, replace "Flamenco.ogg" with your user input
})
}
shinyApp(ui = ui, server = server)
PS:你可以使用shinyjs'hidden
, hide
and show
or conditionalPanel
如果您想对用户隐藏音频标签,直到按下该按钮。