闪亮的改变滑块动画速度

joh*_*838 5 animation r dynamic slider shiny

我想知道是否有办法改变闪亮滑块的动画速度.因此,对于(在ui.R中)的滑块:

sliderInput("test_slider", 
            "Animation:", 
             min = 1, 
             max = 200, 
             value = 100, 
             animate = animationOptions(interval = ANIMATION SPEED))
Run Code Online (Sandbox Code Playgroud)

我希望能够更改ANIMATION SPEED,而不是将其保持在我在开头设置的静态值.此外,动画仅在我将其放入ui时才有效,因此我无法将其作为服务器中的反应UI.例如,我不能在server.R中做

output$test_slider <- renderUI({
   sliderInput("test_slider", 
               "Animation:", 
                min = 1, 
                max = 200, 
                value = 100, 
                animate = animationOptions(interval = ANIMATION SPEED))
})
Run Code Online (Sandbox Code Playgroud)

然后添加ui.R

uiOutput("test_slider")
Run Code Online (Sandbox Code Playgroud)

这本来是理想的,因为我自定义了诸如min和max之类的东西(可能还有ANIMATION SPEED),但遗憾的是这样做会使播放按钮无效并且动画无法启动.我对如何动态更改滑块输入参数感到茫然.即使你的解决方案涉及javascript,我也会完全没问题.非常感谢.


编辑:

所以我还没有答案,但我已经接近了.我查看了javascript文件并添加了类似的内容(在ui.R中):

         numericInput("anim",
                      "interval: ",
                      value = 100),
         sliderInput("test_slider",
                    "Animation",
                     min = 1,
                     max = 200,
                     value = 100,
                     step = 1,
                     animate = animationOptions(interval = 700,
                               playButton = icon('play', "fa-3x"),
                               pauseButton = icon('pause', "fa-3x"))),
        singleton(
          tags$head(tags$script('Shiny.addCustomMessageHandler("testmessage",
                function(message) {$(this).attr("data-interval", message.interval); 
                                console.log($(this).attr("data-interval"))});'))
          )
Run Code Online (Sandbox Code Playgroud)

我有console.log只是为了表明我正在发送正确的东西,因为它在终端中打印正确的值.然后我在server.R做:

  observe({
    if(!is.null(input$anim)) {
      session$sendCustomMessage(type = "testmessage", 
                                message = list(interval = input$anim,
                                         controller = input$test_slider))
    }
  })
Run Code Online (Sandbox Code Playgroud)

我在这里使用闪亮回购中的文档:https: //github.com/rstudio/shiny/blob/a6cd0fdb85d5d2175ebc4fcb590386e4cedcbbd9/srcjs/input_binding_slider.js

以及此博客上的文档:https: //ryouready.wordpress.com/2013/11/20/sending-data-from-client-to-server-and-back-using-shiny/

github repo的那个我正在使用下面的部分

animInterval = self.attr("data-interval")
Run Code Online (Sandbox Code Playgroud)

哪里

 var self = $(this)
Run Code Online (Sandbox Code Playgroud)

我之前从未真正使用过javascript,所以我可能会遗漏一些明显的东西.任何帮助是极大的赞赏!

小智 2

我不确定我是否理解您的问题,但如果我这样做,以下操作将会起作用:

在服务器中:

output$slider_to_anim <- renderUI({
  sliderInput("slider", 
           "Animation:", 
            min = 1, 
            max = 200, 
            value = 100, 
            animate = animationOptions(interval = input$speed))
})

output$speed_value <- renderUI({
  numericInput("speed","Speed Value :",value = 100)
})
Run Code Online (Sandbox Code Playgroud)

并在 ui.R 中添加:

uiOutpout("slider_to_anim"),
uiOutpout("speed_value")
Run Code Online (Sandbox Code Playgroud)