Проблема при перезагрузке анимированного GIF в Chrome

ok Я решил эту проблему.

  1. Закройте все окна, которые потенциально влияют на этот файл .git / index.lock
  2. Удалите .git / index.lock file.
  3. Откройте ваш редактор командной строки и cd в адрес ваших git-файлов.

(Если файл создан, просто из cd в это место, тогда проблема заключается в вашем редакторе. Закройте редактор. Не используйте этот редактор для этой задачи. Откройте другой вид редактора - оболочку оболочки Windows или просто cmd. Теперь вы можете использовать команды git для продолжения)

3
задан ixodid 18 March 2019 в 01:46
поделиться

1 ответ

Я избегаю использовать renderImage для такого рода вещей. В прошлом я сам некоторое время боролся с этой функцией (она отлично подходит для графиков, но не для реальных png, jpeg, gif и т. Д., Кажется), поэтому здесь есть рабочая альтернатива, использующая тег html img () в качестве объекта вывода renderUI. Кажется, твой javascript работает нормально. Кроме того, вы можете просто использовать интерактивное изображение, которое, как мне кажется, работает лучше, чем локально сохраненное

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),
                uiOutput('anim_plot'),
                fluidRow(
                  column(3,  
                         actionButton("do_again", "Again")
                  )
                )
)

# Define server logic ----
server <- function(input, output) {
  output$anim_plot <- renderUI({
    img(src='https://uc290691998b0891615b1f3e9397.previews.dropboxusercontent.com/p/orig/AAae6QYO7VLEEUVYdUuL985gwFGGVQ_RJ0mjLtfJt0bk3UO1ThezW4YO7R5LUzN9_m6moBjubhfX2AAnYmEkwDEjnwIw1gLOWUrOw4q_pKYYtXW-JCgghu4NuCgPKCm3RXxt3rNULvlUg-cP_Oj2vnItglJchP6a6a_lyApxTdZHwPk4Yv6jWxiYANVdFAVKxiTeHWVC5J3PYDeW8yOnaj4VGDj92eJCIXYtjpmznffo0tPUdUovNJMMW5nzsgT0L38w_5h39bcBxIwoCBmZ95iC8SRd9BGHxJMGCM4HUVh_Ly0VW3lwBxUx3O__VD5Ind-lahJwVkZjmet-HzP6XnUB/p.gif?size_mode=5', align = "right")
  })

  observeEvent(input$do_again, {
    js$reset_anim()

  })
}

shinyApp(ui = ui, server = server)  

ОБНОВЛЕНИЕ:
Приложение с файлом на сервере, файл пользовательского интерфейса и 5 картинок в папке www: я только что скачал 5 случайных картинок из giphy и сделал один, чтобы не зацикливаться с ezgif.com , сохранил их как gif1.gif, gif2.gif и т. д.

@OP: Имейте в виду, что ваш JavaScript нацелен на 1 конкретный объект GIF. Если вы хотите перезагрузить другой gif, вам придется переписать свой javascript, чтобы получить входной аргумент, который будет именем вашего anim_plot n, который вы хотите перезапустить, я думаю. Я не эксперт по javascript, поэтому я не буду пытаться добавить это здесь, но если вы это сделаете, не стесняйтесь добавлять это к информации здесь

p.s. 1: не ставьте www / в аргументе src. Shiny автоматически заглядывает в папку www. .

ps 2: имейте в виду, что некоторые вещи не работают во внутреннем интерфейсе RStudio, и настройте его для внешнего запуска приложений, нажав кнопку «Run external» под крошечным меню стрелки, которое находится на справа от кнопки воспроизведения «Запустить приложение».

# File of the server.
server <- function(input, output) {

  lapply(1:5, function(image_id) { 
  output[[paste('anim_plot', image_id, sep = '')]] <- renderUI({
    img(src=paste('gif', image_id, '.gif', sep = ''), align = "right")

    })
  })

  observeEvent(input$do_again, {
    js$reset_anim()

  })
}


# File of UI ----
library(shiny)
library(shinyjs)

jsCode <- '
shinyjs.reset_anim = function(anim_plot2) {
  var div_elem = document.getElementById("anim_plot2");
  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);
}
'


ui <- fluidPage(useShinyjs(),
                extendShinyjs(text = jsCode),
                uiOutput('anim_plot1'),
                uiOutput('anim_plot2'),
                uiOutput('anim_plot3'),
                uiOutput('anim_plot4'),
                uiOutput('anim_plot5'),

                fluidRow(
                  column(3,  
                         actionButton("do_again", "Again")
                  )
                )
)

screenshot

0
ответ дан Mark 18 March 2019 в 01:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: