Вот решение, использующее JavaScript библиотеку slick . Файлы slick доступны для загрузки здесь , и вы должны поместить их в подпапку www*1008*.
library(shiny)
# images to be displayed ####
## these images are in the www subfolder
images <- c("img1.JPG", "img2.JPG", "img3.JPG", "img4.JPG", "img5.JPG")
# ui #####
ui <- fluidPage(
tags$head(
tags$link(rel="stylesheet", type="text/css",
href="slick-1.8.1/slick/slick-theme.css"),
tags$link(rel="stylesheet", type="text/css",
href="slick-1.8.1/slick/slick.css"),
tags$script(type="text/javascript",
src="slick-1.8.1/slick/slick.js"),
tags$script(HTML("
function runSlick(){
$('#images').slick({
arrows: true,
dots: true,
slidesToShow: 1,
slidesToScroll: 1,
autoplay: false
});
}
function autoplay(x){
if(x % 2 === 1){
$('#images').slick('slickPlay');
}else{
$('#images').slick('slickPause');
}
}
Shiny.addCustomMessageHandler('autoplay', autoplay);")),
tags$style(HTML("
#images .slick-prev {
position:absolute;
top:65px;
left:-50px;
}
#images .slick-next {
position:absolute;
top:95px;
left:-50px;
}
.slick-prev:before, .slick-next:before {
color:red !important;
font-size: 30px;
}
#content {
margin: auto;
padding: 2px;
width: 90%;
}"))
),
sidebarLayout(
sidebarPanel(
actionButton("go", "play/pause")
),
mainPanel(
uiOutput("content")
)
)
)
# server #####
server <- function(input, output, session){
output[["content"]] <- renderUI({
imgs <- sapply(images, function(img){
tags$div(tags$img(src = img, width = "400px", height = "400px"))
}, simplify = FALSE, USE.NAMES = FALSE)
container <- do.call(function(...) tags$div(id="images", ...), imgs)
tagList(container, tags$script(HTML("runSlick();")))
})
observeEvent(input[["go"]], {
session$sendCustomMessage("autoplay", input[["go"]])
})
}
# Run the application ####
shinyApp(ui = ui, server = server)