Используя предложение @YBS поместить «bs_carousel (...) внутри renderUI» Вот моя попытка. Сначала рендеринг слайдов и автовоспроизведение отключены. Однако нажмите правый шеврон, и начнется автоигра.
library("shiny")
library("shinyjs")
library("bsplus")
# Stop autoplay
# https://stackoverflow.com/questions/26133618/how-to-stop-bootstrap-carousel-from-autosliding
jscode <- "
shinyjs.init = function() {
$('.carousel').carousel({ interval: false });
}"
ui <- fluidPage(
shinyjs::useShinyjs(),
extendShinyjs(text = jscode, functions = c()),
# Application title
titlePanel("Carousel Demo"),
uiOutput("carousel")
)
server <- shinyServer(function(input, output) {
output$carousel <- renderUI({
bs_carousel(id = "images", use_indicators = TRUE) %>%
bs_append(
content = bs_carousel_image(src = "https://placehold.it/900x500/3c8dbc/ffffff&text=Merry")
) %>%
bs_append(
content = bs_carousel_image(src = "https://placehold.it/900x500/3c8dbc/ffffff&text=Christmas")
) %>%
bs_append(
content = bs_carousel_image(src = "https://placehold.it/900x500/3c8dbc/ffffff&text=To")
) %>%
bs_append(
content = bs_carousel_image(src = "https://placehold.it/900x500/3c8dbc/ffffff&text=All")
)
})
})
# Run the application
shinyApp(ui = ui, server = server)
Я использую карусель из пакета R bsplus. Я хочу остановить автовоспроизведение. Различные решения были упомянуты здесь.
Я безуспешно пытаюсь реализовать один из них ниже.
library("shiny")
library("bsplus")
# Stop autoplay
# https://stackoverflow.com/questions/26133618/how-to-stop-bootstrap-carousel-from-autosliding
jscode <- "
shinyjs.init = function() {
$('.carousel').carousel({ interval: false });
}"
ui <- shinyUI(fluidPage(
shinyjs::useShinyjs(),
extendShinyjs(text = jscode, functions = c()),
# Application title
titlePanel("Carousel Demo"),
),
bs_carousel(id = "images", use_indicators = TRUE) %>%
bs_append(
content = bs_carousel_image(src = "https://placehold.it/900x500/3c8dbc/ffffff&text=Merry")
) %>%
bs_append(
content = bs_carousel_image(src = "https://placehold.it/900x500/3c8dbc/ffffff&text=Christmas")
) %>%
bs_append(
content = bs_carousel_image(src = "https://placehold.it/900x500/3c8dbc/ffffff&text=To")
) %>%
bs_append(
content = bs_carousel_image(src = "https://placehold.it/900x500/3c8dbc/ffffff&text=All")
)
)
server <- shinyServer(function(input, output) {
})
# Run the application
shinyApp(ui = ui, server = server)
Сначала это работает. Но автозапуск начинается, если вы нажмете «следующий» шеврон. См. новый код в исходном сообщении.
Похоже, это была ошибка, которая была исправлена некоторое время назад. Я не уверен, что это все еще ошибка. Возможно, лучше всего поместить кнопку воспроизведения/паузы, чтобы пользователи могли щелкнуть, чтобы воспроизвести, и щелкнуть еще раз, чтобы приостановить.
Как я могу добавить кнопку паузы, если я не знаю, как сделать паузу программно?
Почему-то автовоспроизведение не останавливается в bs_carousel()
, если только указатель мыши не наведен на активный слайд. Однако приведенный ниже код демонстрирует, что автозапуск можно отключить в пакете carousel()
from shinydashboardPlus
.
library(shiny)
library(shinydashboardPlus)
library(DT)
jscode <-"
$(document).ready(function(){
$('#mycarousel').carousel( { interval: false } );
});"
shinyApp(
ui = dashboardPage(
header = dashboardHeader(),
sidebar = dashboardSidebar(),
body = dashboardBody(
tags$head(
tags$style(HTML("
#mycarousel {
width:900px;
height:600px;
}
.carousel-control{
color:#FF0000;
}
"))
),
tags$head(tags$script(HTML(jscode))),
carousel(
id = "mycarousel",
carouselItem(
DTOutput("show_iris_dt")
),
carouselItem(
caption = "An image file",
tags$img(src = "YBS.png")
),
carouselItem(
caption = "Item 3",
tags$img(src = "http://placehold.it/900x500/39CCCC/ffffff&text=Happy+New+Year")
)
)
),
title = "Carousel Demo"
),
server = function(input, output) {
output$show_iris_dt <- renderDT({
datatable(iris)
})
}
)
Пытаясь использовать ваш код, я получаю: «Ошибка в карусели (id = «mycarousel», carouselItem (DTOutput («show_iris_dt»)),: не удалось найти функцию «карусель»»
К сожалению, вам необходимо установить ShinyDashboardPlus.
Так что это совершенно другое решение для карусели, чем bsplus?
Да. Я не мог остановить автозапуск в bsplus; это может быть ошибка.
Если вы поместите
bs_carousel(...)
внутриrenderUI
на стороне сервера, автозапуск не будет включен.