是否可以为情节动画按钮制作闪亮的observeEvent
或类似的东西?
也就是说:如何检测何时按下动画按钮以在侧面显示其他内容?
我们需要对按钮的引用,但查看 HTML 输出,我找不到按钮的id
。我也尝试使用情节本身来制作动画,但这也不起作用。
查看?animation_opts
,我找到了可能的属性列表,但无法弄清楚。我看到了对execute = bool
属性的引用,描述为:
true
时,将执行 API 方法。false
时,所有其他行为都相同,命令执行将被跳过。例如,当挂钩到plotly_buttonclicked
方法并手动执行 API 命令时,这可能很有用,而不会失去通过method
和args
的规范自动绑定到绘图状态的 updatemenu 的好处。
但是我看不出如何称呼plotly_buttonclicked
.而且,实际上,我不想在内部调用它,而只是在用户调用它时observe
。
所以,基本上,给定这个例子:
library(plotly)
library(shiny)
ui <- fluidPage(
plotlyOutput("p")
)
server <- function(input, output, session) {
p <- plot_ly() %>%
add_pie(values = c(1, 2, 3, 4, 5, 6),
frame = c(1, 1, 2, 2, 3, 3))
output$p <- renderPlotly(p)
observeEvent(p, ignoreInit = TRUE, {
print(str(p))
})
}
shinyApp(ui, server)
我想在用户按"播放"时将内容打印到控制台。
有一个事件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 中执行"播放"按钮,而不是使用情节性的"播放"按钮;请参阅此答案。
编辑
事实上,你找到了好事件。这是plotly_buttonclicked
.将我的代码替换为:
p %>% onRender("
function(el, x){
el.on('plotly_buttonclicked', function(){
Shiny.setInputValue('anim', true)
});
}")