sliderInput动态更新动画间隔
我希望能够在动画仍在播放时更新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
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)