Sto costruendo un'app lucida in cui gli utenti fanno clic su un'immagine e questo li fa avanzare a un'altra immagine. Questo sembra relativamente semplice, ma prima che l'utente veda la prima immagine, deve inserire il suo indirizzo email. Per raggiungere questo obiettivo, ho utilizzato conditionalPanel
in cui la prima immagine viene visualizzata solo quando l'utente preme un pulsante di azione. Tuttavia, quando il pannello per le immagini è incorporato all'interno di conditionalPanel
, l'argomento click
per imageOutput
sembra non funzionare più.imageOutput click within condizionalePanel
Ho una directory denominata images
con 9 immagini contenute al suo interno, con nomi di file 1.png, 2.png...9.png
(a proposito, se c'è un modo di caricare questa directory per rendere questo esempio più facilmente replicabile, sarei felice di prendere suggerimenti!). Il seguente MWE - che non include l'elemento conditionalPanel
- funziona bene:
library(shiny)
## User interface
ui <- fluidPage(
h1("MWE",align="center"),
fluidRow(
column(4, conditionalPanel(condition = "input.signingo == 0",
wellPanel(
textInput("who",label = "Please enter your email address.", value=""),
actionButton("signingo",label="Go.")
))
),
column(6, align="center",
wellPanel(
imageOutput("image", height = 175, width = 116, click = "photo_click")
)
)
)
)
server <- function(input, output){
values <- reactiveValues(i = 0, selections = sample(1:9,1))
## Load image
output$image <- renderImage({
filename <- normalizePath(file.path(paste0('images/',values$selections,".png")))
# Return a list containing the filename and alt text
list(src = filename,
alt = paste(input$name))
}, deleteFile = FALSE)
## Function to increment counter by one and to randomly select new image
click.function <- function(){isolate({
values$i <- values$i + 1
values$selections <- sample(1:9,1)
})}
## Move on
observeEvent(input$photo_click,{click.function() })
}
shinyApp(ui = ui, server = server)
Tuttavia, quando includo l'elemento conditionalPanel
, cliccando sull'immagine non sembra produrre una nuova immagine. Questo è il codice che sto usando:
library(shiny)
## User interface
ui <- fluidPage(
h1("MWE",align="center"),
fluidRow(
column(4, conditionalPanel(condition = "input.signingo == 0",
wellPanel(
textInput("who",label = "Please enter your email address.", value=""),
actionButton("signingo",label="Go.")
))
),
column(6, align="center",
conditionalPanel(condition = "input.signingo > 0",
wellPanel(
imageOutput("image", height = 175, width = 116, click = "photo_click")
))
)
)
)
server <- function(input, output){
values <- reactiveValues(i = 0, selections = sample(1:9,1))
## Load image
output$image <- renderImage({
filename <- normalizePath(file.path(paste0('images/',values$selections,".png")))
# Return a list containing the filename and alt text
list(src = filename,
alt = paste(input$name))
}, deleteFile = FALSE)
## Function to increment counter by one and to randomly select new image
click.function <- function(){isolate({
values$i <- values$i + 1
values$selections <- sample(1:9,1)
})}
## Move on
observeEvent(input$photo_click,{click.function() })
}
shinyApp(ui = ui, server = server)
Il problema è che, anche se il primo conditionalPanel
sembra fare il suo lavoro - l'utente vede il "Inserisci il tuo indirizzo e-mail" prima, e vede solo la prima immagine dopo aver cliccato su "Vai" - facendo clic sull'immagine non si avanza più l'utente in avanti all'immagine successiva. Qualsiasi idea sarebbe più apprezzata.
Grande risposta. Grazie per essere così completo. – user2728808