Ho avuto una piccola domanda. Ho provato a fare molte ricerche ma non ho avuto fortuna. C'è un modo in cui R-shiny deve catturare un doppio clic su un elemento come un pulsante.Doppio clic in R-lucido
6
A
risposta
12
Ecco un modo per farlo. La chiave è rilevare l'evento dblclick
sul lato client (ad esempio, ui), quindi richiamare Shiny.onInputChange
per aggiornare il valore di una variabile R, che può quindi essere prelevata dal server.
Ecco cosa succede quando si fa doppio clic sul pulsante.
- Il valore viene incrementato di 1
- Il valore incrementato viene utilizzato per aggiornare la variabile
x
. - Il server rileva la modifica in
x
- Il server aggiorna
textOutput
.
library(shiny) ui = bootstrapPage( tags$button(id = 'mybutton', 'button', class='btn btn-primary', value = 0), textOutput('x'), # when button is double clicked increase the value by one # and update the input variable x tags$script(" $('#mybutton').on('dblclick', function(){ var val = +this.value this.value = val + 1 Shiny.onInputChange('x', this.value) console.log(this.value) }) ") ) server = function(input, output, session){ output$x <- renderText({ input$x }) } runApp(list(ui = ui, server = server))
0
Ho aggiornato la mia risposta in base al commento qui sotto. Qui ho usato una soglia di differenza di tempo di 0,2 secondi per distinguere tra un doppio orologio e un clic regolare. Ho usato un approccio leggermente diverso nella mia app. Ho semplicemente controllato quante volte il pulsante è stato premuto controllando se è divisibile per 2 o meno.
library(shiny)
t1 <<- Sys.time()
ui =fluidPage(
actionButton("my_button", "Dont Touch it!"),
mainPanel(textOutput("x"))
)
server = function(input, output, session){
my_data <- reactive({
if(input$my_button == 0)
{
return()
}
if(input$my_button%%2!=0)
{
t1 <<- Sys.time()
}
if(input$my_button%%2==0 & (Sys.time() - t1 <= 0.2))
{
"You pushed the button twice!"
}
})
output$x <- renderText({my_data()})
}
runApp(list(ui = ui, server = server))
AFAIK due clic singoli NON equivalgono a un doppio clic. – Ramnath
@Ramnath Ho aggiornato la mia risposta per includere la soglia temporale del "doppio clic" –