Ich versuche, ino.js Multipage-Funktionalität auf einer Shiny-App zu implementieren.Multi-Seite intro.js mit Shiny
Der folgende Code ist ein Versuch, der nicht funktioniert. Die erste Registerkarte funktioniert gut, das Popup für die zweite Seite wird angezeigt, aber ohne die Registerkarte zu wechseln.
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')
})
})
Die js und CSS-Dateien von intro.js sind in der js und CSS-Ordnern im Ordner www. Die intro.js Dateien können gefunden werden here
Meine Vermutung ist, dass ich etwas falsch in der Funktion in der Javascript-Code am unteren Rand von ui.R. Ich habe versucht, das Beispiel von here anzupassen, indem ich die window.location.href durch window.location.hash ersetze und die Tab-ID referenziere, die "tt" ist.
gewickelt werden muss, ich glaube, Sie wahrscheinlich auf die Registerkarte Ereignis mit Hilfe von JavaScript simulieren müssen. –
Schamloser Stecker: Versuchen Sie, das 'rintrojs'-Paket auszuprobieren. https://github.com/carlanz/rintrojs – Carl