Я пытаюсь реализовать многостраничную функциональность in.js в приложении Shiny.Многостраничный сайт intro.js с Shiny
Код ниже - попытка, которая не работает. Первая вкладка хорошо работает, отображается всплывающее окно для второй страницы, но без переключения вкладки.
ui.R
library(shiny)
shinyUI(tagList(
tags$head(
HTML("<link rel='stylesheet' type='text/css' href='css/introjs.min.css'>")
),
navbarPage("Old Faithful Geyser Data",
tabPanel(id = "fTab", "First tab",
HTML("<h1 data-step='1' data-intro='This is a tooltip!'>Basic Usage</h1>"),
sliderInput("bins",
"Number of bins:",
min = 1,
max = 50,
value = 30),
plotOutput("distPlot"),
HTML("<a id='startButton' class='btn btn-large btn-success' href='javascript:void(0);'>Help</a>")
),
tabPanel(tabName = "sTab", "Second tab", id = "tt",
HTML("<h1 data-step='2' data-intro='This is a second tooltip!'>Basic Usage</h1>"),
sliderInput("bins2",
"Number of bins:",
min = 1,
max = 50,
value = 30),
plotOutput("distPlot2")
)
),
HTML("<script type='text/javascript' src='js/intro.min.js'></script>"),
HTML("<script type='text/javascript'>document.getElementById('startButton').onclick = function() {
introJs().setOption('doneLabel', 'Next page').start().oncomplete(function() {
window.location.hash = '#!tt?multipage=true';
});
};</script>")
))
server.R
library(shiny)
shinyServer(function(input, output) {
output$distPlot <- renderPlot({
x <- faithful[, 2]
bins <- seq(min(x), max(x), length.out = input$bins + 1)
hist(x, breaks = bins, col = 'darkgray', border = 'white')
})
output$distPlot2 <- renderPlot({
x <- faithful[, 2]
bins <- seq(min(x), max(x), length.out = input$bins2 + 1)
hist(x, breaks = bins, col = 'darkgray', border = 'white')
})
})
В JS и CSS файлы из intro.js находятся в JS и CSS папки внутри папки WWW. Файлы intro.js могут быть найдены here
Я предполагаю, что я делаю что-то неправильно в функции в коде javascript внизу ii.R. Я попытался адаптировать пример из here, заменив window.location.href на window.location.hash и ссылаясь на идентификатор вкладки, который является «tt».
Я думаю, что вы, вероятно, нужно, чтобы имитировать событие щелчка с помощью JavaScript. –
Бесстыдный штепсель: попробуйте пакет 'rintrojs'. https://github.com/carlganz/rintrojs – Carl