在Chrome中重新加载动画GIF时出现问题-第二部分

时间:2019-03-27 23:35:09

标签: javascript r google-chrome shiny

继续Mark的建议here,我现在正在使用uiOutputrenderUI

下面的代码显示动画gif(“ anione”)。按下“再次获得”按钮后,它将以我不完全了解的方式使用Java重置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)  

1 个答案:

答案 0 :(得分:1)

你不能简单地做

library(shiny)

# Define UI ----
ui <- fluidPage(
  uiOutput('anim_plot'),
  fluidRow(
    column(3,  
           actionButton("do_again", "Again")
    )
  )
)

# Define server logic ----
server <- function(input, output) {

  gif <- reactiveVal("ani.gif")

  observeEvent(input$do_again, {
    gif("ani2.gif")
  })

  output$anim_plot <- renderUI({
    img(src = gif(), width = "256")
  })

}

shinyApp(ui = ui, server = server)  

enter image description here