如何在R Shiny Conductor Tour中嵌入Javascript?附完整实现示例
在Shiny的Conductor Tour中使用JavaScript实操示例
我当初在开发Shiny应用的Conductor引导 tour 时,踩过一个不小的坑:官方vignette只说明Conductor$new()方法的onComplete、onCancel、onShow、onHide、onStart、onActive这些参数可以填入待执行的JavaScript代码,但完全没有给出任何具体的代码示例。作为对JS不太熟悉的开发者,我当时卡了好长时间才摸清楚门道!
下面我分享一个实操示例,核心功能是通过Conductor Tour的步骤触发JS代码,更新指定的input$变量,这个更新后的值能被Shiny的响应式函数(比如observeEvent())检测到。示例里我只是把input$my_tour_state更新为true或false,但你完全可以根据需求传入数字、字符串等其他类型的值,用这种方式实现通过引导步骤控制部分输入组件的效果。
library(shiny) library(conductor) ui <- fluidPage( use_conductor(), # 创建启动引导的按钮 actionButton(inputId = "ui_start_tour", label = "Start Tour"), # 展示引导状态 verbatimTextOutput(outputId = "tour_status") ) server <- function(input, output, session) { # 创建Conductor引导实例 conductor <- Conductor$new()$ step( id = "step1", title = "Welcome", text = "This is the first step.", # 用JS更新响应式变量my_tour_state onShow = "Shiny.setInputValue('my_tour_state', true, {priority: 'event'})" )$ step( id = "step2", title = "Second Step", text = "This is the second step.", onShow = "Shiny.setInputValue('my_tour_state', false, {priority: 'event'})" ) # 点击按钮启动引导 observeEvent(eventExpr = input$ui_start_tour, handlerExpr = { conductor$init()$start() }) # 实时展示引导状态 output$tour_status <- renderText({ paste("Tour status:", input$my_tour_state) }) } shinyApp(ui, server)
内容的提问来源于stack exchange,提问作者Nevil
相关产品推荐
相关产品推荐

