如何在Shining中使用Javascript更改卷?

如何在Shining中使用Javascript更改卷?,javascript,r,shiny,Javascript,R,Shiny,我正在尝试更改我闪亮应用程序中音频标签上的音量。我调查过的一些网站显示,您可以直接使用audio标记中的“volume”参数来设置它,但我无法复制它 我发现的这个站点使用Javascript来更新卷,但我不知道如何调用用Javascript创建的函数。非常感谢您的帮助 library(shiny) library(shinyjs) ui <- fluidPage( useShinyjs(), tags$audio(id = "myAudio", controls = NA, au

我正在尝试更改我闪亮应用程序中音频标签上的音量。我调查过的一些网站显示,您可以直接使用audio标记中的“volume”参数来设置它,但我无法复制它

我发现的这个站点使用Javascript来更新卷,但我不知道如何调用用Javascript创建的函数。非常感谢您的帮助

library(shiny)
library(shinyjs)

ui <- fluidPage(
  useShinyjs(),
  tags$audio(id = "myAudio", controls = NA, autoplay = NA, tags$source(src="aud.mpeg")),
  br(),
  actionButton("mybutton", "Submit"),

  tags$script('
    var x = document.getElementById("myAudio").onclick 
    function setHalfVolume() {
      x.volume = 0.2;
    };
  ')
)

server <- function(input, output) {
  observeEvent(input$mybutton, {
    setHalfVolume()
  })

}

shinyApp(ui = ui, server = server)

库(闪亮)
图书馆(shinyjs)

ui您离目标非常接近,但在获取正确的ID方面存在一些问题

要遵循您的路径,请将脚本替换为:

document.getElementById("mybutton").onclick = 
    function setHalfVolume() {
        document.getElementById("myAudio").volume = 0.2;
    };
按钮的onclick属性必须是更改,而不是音频的属性。并且音频DOM具有要更改的音量属性

另一种方法是直接使用actionButton的onclick属性

tags$script('
    decrease = function(){ document.getElementById("myAudio").volume = 0.2;}
')
tags$audio(id = "myAudio", controls = NA, autoplay = NA,     tags$source(src="sound.mp3")),
actionButton("lowerButton", "lower", onclick="decrease()")

谢谢你的提问和回答。这帮了大忙。我有一个后续问题:是否可以使用滑块更改音量?因此,有必要为脚本设置一个输入变量。类似这样的东西(但似乎不起作用):


对于未来的读者:这里有一个例子,我不确定如何实现你的代码,但当我在chrome这样的网络浏览器中打开我的应用程序时,我的音频元素已经有了一个内置的音频滑块。但是,如果我只是在RStudio中运行应用程序,则不会出现这种情况。
tags$script('volumeChange = function(in){ document.getElementById("myAudio").volume = in;}'),
#calibration slider
sliderInput("levelSlider", "Level:",min = 0, max = 1, value = 0.3),
# calibrate level button
actionButton("playButton", "Play sound", onclick=paste0("volumeChange(","levelSlider$value",")")),