【发布时间】:2019-03-28 17:08:59
【问题描述】:
继续 Mark 的建议 here 我现在使用 uiOutput 和 renderUI。
下面的代码显示了一个动画 gif(“anone”)。当按下“再次”按钮时,它会以我不完全理解的方式使用 Javascript 重置 Chrome,然后通过用另一个动画 gif(“anitwo”)覆盖原始动画 gif 来模拟我的更大程序。
但是,“anitwo”不显示,“anione”显示。我可以查看本地文件并查看它是否已写入并通过在 Chrome 中打开它成功查看。如何查看同名的不同文件?
我意识到我对“www/tmp/ani.gif”和“tmp/ani.gif”的使用不一致,并且理解闪亮在“www”中查找文件。然而,如果没有这些不一致,我会得到文件未找到错误。
ani.gif 和 ani2.gif 是 here。
library(shiny)
library(shinyjs)
library(magick)
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),
uiOutput('anim_plot'),
fluidRow(
column(3,
actionButton("do_again", "Again")
)
)
)
# Define server logic ----
server <- function(input, output) {
output$anim_plot <- renderUI({
img(src = 'tmp/ani.gif',
width = '900')
})
observeEvent(input$do_again, {
print("Again")
js$reset_anim()
# When Again clicked, simulate the creation of a new animated gif by reading in a file and
# over writing the old one. Try displaying this new animated gif.
img2 <- image_read("www/tmp/ani2.gif")
image_write(img2, path = "www/tmp/ani.gif")
output$anim_plot <- renderUI({
img(src = 'tmp/ani.gif',
width = '900')
})
})
}
shinyApp(ui = ui, server = server)
【问题讨论】:
-
我看到经常回答我自己问题的 Stephane 发布了一个很好的答案。顺便说一句,我很好奇你是如何在你的应用程序中制作 GIF 的,因为我可能会在我正在构建的自己的程序中使用它。
-
辛苦工作由 Thomas Lin Pedersen 的转换器包完成:github.com/thomasp85/transformr。如果你可以得到任何你想变形为简单特征对象的形状(cran.r-project.org/web/packages/sf/vignettes/sf1.html),那么转换器可以为你生成一个动画 gif。
-
啊,这可能不适合制作那里的情节或png的gif
标签: javascript r google-chrome shiny