对剧情的动画按钮做出反应

时间:2019-08-26 16:39:46

标签: r shiny plotly r-plotly

是否可以使用闪亮的observeEvent或类似的动画按钮?

也就是说,如何检测按下动画按钮以在侧面显示其他内容?

我们需要对按钮的引用,但是在HTML输出中,我找不到为按钮指定的id。我还尝试使用情节本身进行动画处理,但这也不起作用。

看着?animation_opts,我发现了list of possible attributes,但找不到。我看到了对execute = bool属性的引用,描述为:

  

true时,将执行API方法。当false时,所有其他行为都相同,并且命令执行被跳过。例如,在挂接到plotly_buttonclicked方法并手动执行API命令而又不失去updatemenu的好处的情况下,这很有用,该更新菜单通过method和{ {1}}。

但是我看不到如何调用args。而且,实际上,我不想在内部调用它,而只是在用户调用时plotly_buttonclicked

因此,基本上,给出以下示例:

observe

每当用户按下“播放”时,我都希望在控制台上打印一些内容。

1 个答案:

答案 0 :(得分:0)

有一个事件plotly_animated,但似乎只有在动画结束时才会触发(编辑:,这不是好事件;请参阅我的编辑)。

library(shiny)
library(plotly)
library(htmlwidgets)

ui <- fluidPage(
  plotlyOutput("p")
)

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

  output$p <- renderPlotly({
    p <- plot_ly() %>%
      add_pie(values = c(1, 2, 3, 4, 5, 6),
              frame = c(1, 1, 2, 2, 3, 3))
    p %>% onRender("
                   function(el, x){
                     el.on('plotly_animated', function(){
                       Shiny.setInputValue('anim', true)
                     });
                   }")
  })

  observeEvent(input$anim, {
    print("ANIMATION")
  })

}

shinyApp(ui, server)

否则,您可以使用Shiny的“播放”按钮来代替使用冗长的“播放”按钮;参见this answer


编辑

事实上,您发现了好事件。是plotly_buttonclicked。将我的代码替换为:

p %>% onRender("
               function(el, x){
                 el.on('plotly_buttonclicked', function(){
                   Shiny.setInputValue('anim', true)
                 });
               }")