Mi chiedevo se c'è un modo per cambiare la velocità di animazione di un cursore in lucido. Così, per un cursore che è (in ui.R):Shiny Changing Slider Animation Speed
sliderInput("test_slider",
"Animation:",
min = 1,
max = 200,
value = 100,
animate = animationOptions(interval = ANIMATION SPEED))
voglio essere in grado di cambiare Velocità animazione piuttosto che tenerlo a un valore statico che ho impostato all'inizio. Inoltre, l'animazione funziona solo quando l'ho inserita nell'interfaccia utente, quindi non posso renderla un'interfaccia utente reattiva nel server. Ad esempio, non posso fare a server.R
output$test_slider <- renderUI({
sliderInput("test_slider",
"Animation:",
min = 1,
max = 200,
value = 100,
animate = animationOptions(interval = ANIMATION SPEED))
})
e quindi aggiungere in ui.R
uiOutput("test_slider")
Questo sarebbe stato l'ideale in quanto a personalizzare le cose come minimo e massimo (e probabilmente VELOCITÀ DI ANIMAZIONE), ma sfortunatamente farlo in questo modo fa sì che il pulsante di riproduzione non funzioni e l'animazione non venga avviata. Non riesco a capire come modificare dinamicamente i parametri di input del cursore. Anche se la tua soluzione coinvolge javascript, sarei perfettamente d'accordo. Grazie mille.
EDIT:
Quindi non ho ancora una risposta, ma ho ottenuto più vicino. Ho guardato attraverso il file javascript e ha aggiunto qualcosa di simile (in ui.R):
numericInput("anim",
"interval: ",
value = 100),
sliderInput("test_slider",
"Animation",
min = 1,
max = 200,
value = 100,
step = 1,
animate = animationOptions(interval = 700,
playButton = icon('play', "fa-3x"),
pauseButton = icon('pause', "fa-3x"))),
singleton(
tags$head(tags$script('Shiny.addCustomMessageHandler("testmessage",
function(message) {$(this).attr("data-interval", message.interval);
console.log($(this).attr("data-interval"))});'))
)
ho la console.log solo per dimostrare che io mando la cosa giusta in quanto la fase di stampa il valore corretto nel terminale. Poi faccio in server.R:
observe({
if(!is.null(input$anim)) {
session$sendCustomMessage(type = "testmessage",
message = list(interval = input$anim,
controller = input$test_slider))
}
})
Sto usando sia la documentazione nella repo lucido qui: https://github.com/rstudio/shiny/blob/a6cd0fdb85d5d2175ebc4fcb590386e4cedcbbd9/srcjs/input_binding_slider.js
così come la documentazione presente su questo blog qui: https://ryouready.wordpress.com/2013/11/20/sending-data-from-client-to-server-and-back-using-shiny/
Quello per il repository Github sto usando la parte qui sotto dove si dice
animInterval = self.attr("data-interval")
dove
var self = $(this)
Non ho mai usato javascript in precedenza, quindi potrei mancare qualcosa di ovvio. Qualsiasi aiuto è molto apprezzato!
In teoria utilizzando la notazione dei punti è possibile accedere ai valori di input in ui. Quindi crei un altro slider e inserisci interval = "input.SLIDERINPUTNAME" Ma per la somereason non sono riuscito a farlo funzionare. Maggiori informazioni per accedere ai valori di input in ui: [Pannelli condizionali] (http://shiny.rstudio.com/gallery/conditionalpanel-demo.html) –
Hey, grazie per l'aiuto.Ho postato qualcosa di seguito come una "risposta" in modo che possa essere visualizzata più chiaramente e potrebbe essere più vicina. Sta usando un po 'di javascript, cosa che non mi è molto familiare, ma pensavo che avrebbe dovuto funzionare. Eventuali suggerimenti? Grazie! – johnny838
Penso anche che renderUI dovrebbe funzionare, quindi forse è un bug. Puoi scrivere bug report qui: [Issues] (https://github.com/rstudio/shiny/issues) –