【发布时间】:2019-08-08 08:55:23
【问题描述】:
我有一个重新加载动画 gif 的应用。它在 Safari 中一直有效,在 Chrome 中间歇性地有效。我相信这个问题与提到的here 类似。
我对 Javascript 的了解可以忽略不计。然而,阅读this,我想出了这个例子,它仍然不起作用。使用 Chrome,如果您再次单击足够多次,您会看到有时图像重新加载失败。
library(shiny)
library(shinyjs)
jsCode <- '
shinyjs.reset_anim = function() {
var div_elem = document.getElementById("anim_plot");
var img_elem = div_elem.getElementsByTagName("img")[0];
var src_value = img_elem.getAttribute("src");
img_elem.setAttribute("src", "");
img_elem.setAttribute("src", src_value);
}
'
# Define UI ----
ui <- fluidPage(useShinyjs(),
extendShinyjs(text = jsCode),
plotOutput("anim_plot",
width = "900px",
height = "200px"),
fluidRow(
column(3,
actionButton("do_again", "Again")
)
)
)
# Define server logic ----
server <- function(input, output) {
observeEvent(input$do_again, {
js$reset_anim()
output$anim_plot <- renderImage({
list(src = "www/tmp/ani.gif",
contentType = 'image/gif',
width = 900,
alt = "Text"
)
}, deleteFile = FALSE)
})
}
shinyApp(ui = ui, server = server)
你可以找到一个动画 gif here。
【问题讨论】:
-
您是否也在使用
V8?我认为这是在shinyjs文档中强烈推荐的 -
直到你提到它,我才知道 V8。 V8 - Google 开源 JavaScript 引擎的 R 接口。
-
因此,如果您检查
?shinyjs::extendShinyjs,那么您会在底部的Note中看到它。它不需要额外的函数调用,你只需要让它可用 -
我认为更大的问题是我的 Javascript 不正确或者我调用不正确。
标签: javascript r shiny shinyjs