sliderInput动态更新动画间隔

sliderInput动态更新动画间隔,r,shiny,R,Shiny,我希望能够在动画仍在播放时更新sliderInput动画间隔参数。 下面是一个简单的工作应用程序: library(shiny) ui <- fluidPage( uiOutput('slider'), actionButton('faster', 'faster'), actionButton('slower', 'slower'), br(), htmlOutput('displaySpeed') ) server <- function(input, o

我希望能够在动画仍在播放时更新sliderInput动画间隔参数。

下面是一个简单的工作应用程序:

library(shiny)

ui <- fluidPage(
  uiOutput('slider'),
  actionButton('faster', 'faster'),
  actionButton('slower', 'slower'),
  br(),
  htmlOutput('displaySpeed')
)

server <- function(input, output, session) {
  output$slider <- renderUI({
    sliderInput('slider', 'Slider', min = 0, max = 10, value = 1,
                animate = animationOptions(interval = animation$speed))
  })

  # update animation interval 
  animation <- reactiveValues(speed = 100)
  observeEvent(input$faster, {animation$speed <- animation$speed - 20})
  observeEvent(input$slower, {animation$speed <- animation$speed + 20})

  output$displaySpeed <- renderText({
    HTML("Current interval:", animation$speed)
  })
}

shinyApp(ui, server)
库(闪亮)

ui您可以尝试将
sliderInput
选项更改为
隔离(输入$slider)
,以便重新绘制滑块时,它以当前值为起点

但是,动画在重画时暂停。
renderUI
可能看起来像(您有两个id为
滑块的元素
,因此我将
uiOutput
的id更改为
滑块支架
):


output$slider\u holder对于UI对象(
slider\u div
)使用闪亮的JavaScript事件
shinny:value
),我们可以在
animate$speed
中的更改提示重新渲染完成后立即自动重新单击播放按钮,继续动画

我将max改为100并启用了loop,只是为了演示功能

编辑:添加了一条自定义消息,这样,如果滑块输入的重新渲染不是由更快/更慢按钮导致的,它将被忽略(由OP在注释中请求)

www/shinny events.js

$(function() {
    var renders = 0;
    var press_play = false;
    $(document).on({

        // COULD ALSO DO $('#slider_div').on('shiny:value', function() {...})
        'shiny:value': function(event) {
            switch (event.name) {
                case 'slider_div':
                    // WONT RESUME IF THE RENDER WAS DUE TO SOMETHING ELSE
                    if (renders > 0 && press_play) {
                        setTimeout(function() {
                            console.log('Animation Speed Changed!');
                            $('.slider-animate-button').click();
                        }, 200);

                        press_play = false;
                    } else {
                      renders = 1;
                    }
                    break;

                default:
            } 
        }

    });


    Shiny.addCustomMessageHandler('resume', function(message) {
        press_play = true;
    });
});
app.R

library("shiny")

ui <- fluidPage(
  tags$head(singleton(tags$script(src = 'shiny-events.js'))),

  numericInput("min", "Min", value = 0, min = 0, max = 10),
  numericInput("max", "Max", value = 100, min = 100, max = 200),
  sliderInput("speed", "Animation Speed", value = 100, ticks = FALSE, round = 50, min = 50, max = 1000),
  uiOutput('slider_div'),
  br(),
  htmlOutput('displaySpeed')
)

server <- function(input, output, session) {

  output$slider_div <- renderUI({

    sliderInput(
        inputId = 'slider'
      , label   = 'Slider'
      , min     = input$min
      , max     = input$max
      , value   = isolate(animation$value)
      , animate = animationOptions(interval = animation$speed, loop = TRUE)
    )

  })

  # update animation interval 
  animation <- reactiveValues(speed = 100, value = 1)

  observeEvent(input$speed, {
    invalidateLater(500, session)

    animation$value <- input$slider
    animation$speed <- input$speed
  })

  output$displaySpeed <- renderText({
    HTML("Current interval:", animation$speed)
  })

  observeEvent(input$speed, {
    session$sendCustomMessage('resume', TRUE)
  })

  observeEvent(input$min | input$max, {
    animation$value <- input$slider
  })
}


shinyApp(ui, server)
会议:

Session info ------------------------------------------------------------------------------------------------------------------------
  setting  value                       
version  R version 3.4.4 (2018-03-15)
system   x86_64, mingw32             
ui       RStudio (1.1.383)           
language (EN)                        
collate  English_United States.1252  
tz       America/Chicago             
date     2018-04-27                  

Packages ----------------------------------------------------------------------------------------------------------------------------
  package     * version date       source                                   
base        * 3.4.4   2018-03-15 local                                    
Cairo         1.5-9   2015-09-26 CRAN (R 3.4.1)                           
compiler      3.4.4   2018-03-15 local                                    
curl          3.1     2017-12-12 CRAN (R 3.4.3)                           
datasets    * 3.4.4   2018-03-15 local                                    
devtools      1.13.2  2017-06-02 CRAN (R 3.4.0)                           
digest        0.6.12  2017-01-27 CRAN (R 3.4.0)                           
git2r         0.18.0  2017-01-01 CRAN (R 3.4.0)                           
graphics    * 3.4.4   2018-03-15 local                                    
grDevices   * 3.4.4   2018-03-15 local                                    
htmltools     0.3.6   2017-04-28 CRAN (R 3.4.0)                           
httpuv        1.3.5   2017-07-04 CRAN (R 3.4.1)                           
httr          1.3.1   2017-08-20 CRAN (R 3.4.1)                           
jsonlite      1.5     2017-06-01 CRAN (R 3.4.1)                           
magrittr    * 1.5     2014-11-22 CRAN (R 3.4.0)                           
memoise       1.1.0   2017-04-21 CRAN (R 3.4.0)                           
methods     * 3.4.4   2018-03-15 local                                    
mime          0.5     2016-07-07 CRAN (R 3.4.0)                           
R6            2.2.2   2017-06-17 CRAN (R 3.4.1)                           
Rcpp          0.12.13 2017-09-28 CRAN (R 3.4.2)                           
shiny       * 1.0.5   2017-08-23 CRAN (R 3.4.3)                           
stats       * 3.4.4   2018-03-15 local                                    
tools         3.4.4   2018-03-15 local                                    
utils       * 3.4.4   2018-03-15 local                                    
withr         2.0.0   2017-07-28 CRAN (R 3.4.1)                           
xtable        1.8-2   2016-02-05 CRAN (R 3.4.0)                           
yaml          2.1.16  2017-12-12 CRAN (R 3.4.3)

我在应用程序中有其他输入,这些输入会导致应用程序使用新的最小/最大值重新渲染滑块,并重新启动动画。当前,发生这种情况时,动画将自动开始播放。当滑块像这样重新渲染时,是否可以暂停动画?@sebdalgarno当然可以,请查看编辑,希望这能满足您的需要。我很感谢您的尝试,但这似乎不起作用,即使使用上面的演示应用程序。也许有一个小错误?@sebdalgarno,我已经为上面的完整测试应用程序提供了min/max的输入,这对我来说很好……问题是,现在当单击“更快”或“更慢”按钮时,动画暂停。这是你的事吗?
runGist("https://gist.github.com/McClellandLegge/71472adcfe36270ec876b455beba2bdb")
Session info ------------------------------------------------------------------------------------------------------------------------
  setting  value                       
version  R version 3.4.4 (2018-03-15)
system   x86_64, mingw32             
ui       RStudio (1.1.383)           
language (EN)                        
collate  English_United States.1252  
tz       America/Chicago             
date     2018-04-27                  

Packages ----------------------------------------------------------------------------------------------------------------------------
  package     * version date       source                                   
base        * 3.4.4   2018-03-15 local                                    
Cairo         1.5-9   2015-09-26 CRAN (R 3.4.1)                           
compiler      3.4.4   2018-03-15 local                                    
curl          3.1     2017-12-12 CRAN (R 3.4.3)                           
datasets    * 3.4.4   2018-03-15 local                                    
devtools      1.13.2  2017-06-02 CRAN (R 3.4.0)                           
digest        0.6.12  2017-01-27 CRAN (R 3.4.0)                           
git2r         0.18.0  2017-01-01 CRAN (R 3.4.0)                           
graphics    * 3.4.4   2018-03-15 local                                    
grDevices   * 3.4.4   2018-03-15 local                                    
htmltools     0.3.6   2017-04-28 CRAN (R 3.4.0)                           
httpuv        1.3.5   2017-07-04 CRAN (R 3.4.1)                           
httr          1.3.1   2017-08-20 CRAN (R 3.4.1)                           
jsonlite      1.5     2017-06-01 CRAN (R 3.4.1)                           
magrittr    * 1.5     2014-11-22 CRAN (R 3.4.0)                           
memoise       1.1.0   2017-04-21 CRAN (R 3.4.0)                           
methods     * 3.4.4   2018-03-15 local                                    
mime          0.5     2016-07-07 CRAN (R 3.4.0)                           
R6            2.2.2   2017-06-17 CRAN (R 3.4.1)                           
Rcpp          0.12.13 2017-09-28 CRAN (R 3.4.2)                           
shiny       * 1.0.5   2017-08-23 CRAN (R 3.4.3)                           
stats       * 3.4.4   2018-03-15 local                                    
tools         3.4.4   2018-03-15 local                                    
utils       * 3.4.4   2018-03-15 local                                    
withr         2.0.0   2017-07-28 CRAN (R 3.4.1)                           
xtable        1.8-2   2016-02-05 CRAN (R 3.4.0)                           
yaml          2.1.16  2017-12-12 CRAN (R 3.4.3)