首页 > 解决方案 > 动作按钮在闪亮的应用程序中第二次按下后起作用

问题描述

我有下面带有 3 个动作按钮的闪亮应用程序。我希望每次用户按下它们中的任何一个时都应该显示一对不同的图像。图像已经保存在www我的工作目录中命名的文件夹中。它们被命名为:

"1betA_green.jpg"
"1betA_green.jpg"

用户打开应用时的默认情况。

"2betA_green.jpg"
"2betA_green.jpg"

用户第一次按 any actionButton()

ETC..

这可能发生多达 6 次,然后停止。问题是,当我第一次打开应用程序时,我按下一个动作按钮,它会立即移动到第二对图像,但我必须再次按下它。

library(shiny)
  library(shinyjs)

  ui <- fluidPage(
    id="main",
    title="Risk and ambiguity",
    useShinyjs(),

    #when you press on of the 3 actionbuttons for first-example
    fluidRow(wellPanel(
      splitLayout(cellWidths = c("50%", "50%"), column(6,uiOutput("image1")), column(6,uiOutput("image2"))
                  # column(12,img(src="1betA_green.jpg", height="80%", width="80%", align="left")),
                  # column(12,img(src="1betB_green.jpg", height="80%", width="80%", align="right"))
                  ))),

    #when you press on of the 3 actionbuttons for second time-example
    #fluidRow(wellPanel(
    # splitLayout(cellWidths = c("50%", "50%"),
    #            column(12,img(src="2betA_green.jpg", height="80%", width="80%", align="left")),
    #           column(12,img(src="2betB_green.jpg", height="80%", width="80%", align="right"))))),

    ####
    fluidRow(wellPanel(
      splitLayout(cellWidths = c("33%", "33%", "33%"),
                  #uiOutput("myactions")
                  column(12,align="center",actionButton("action11", label = "Je choisis option A")),
                  column(12,align="center",actionButton("action12", label = "Je choisis le sac avec A et B")),
                  column(12,align="center",actionButton("action13", label = "Je choisis option B"))
      )))
  )

  server <- function(input, output, session){
    rv <- reactiveValues(img11=NULL, img12=NULL)

    myimage1 <- c("YBS.png", "mouse.png","EC.jpg", "man_log.png", "cube.png", "hotdog.png")
    myimage2 <- c("man_log.png", "cube.png", "hotdog.png", "YBS.png", "mouse.png","EC.jpg")

    output$image1 <- renderUI({tags$img(src=rv$img11, height = "50px")})
    output$image2 <- renderUI({tags$img(src=rv$img12, height = "50px")})
    
    observe({
      nclick <- sum(as.numeric(input$action11) + as.numeric(input$action12) + as.numeric(input$action13))
     
      if (nclick==0) { ###  initial display
        rv$img11=myimage1[1]
        rv$img12=myimage2[1]  
      }else if (nclick>0 & nclick<7){
        rv$img11 <- myimage1[nclick]
        rv$img12 <- myimage2[nclick]
      }else{
        rv$img11 <- NULL
        rv$img12 <- NULL
      }
    })
  }

  shinyApp(ui = ui, server = server)

标签: rshiny

解决方案


也许你正在寻找这个

  if (nclick==0) { ###  initial display
    rv$img11=myimage1[1]
    rv$img12=myimage2[1]  
  }else if (nclick>0 & nclick<6){
    rv$img11 <- myimage1[nclick+1]
    rv$img12 <- myimage2[nclick+1]
  }else{
    rv$img11 <- NULL
    rv$img12 <- NULL
  }

推荐阅读