如何将waitress进度条应用到Shiny的modalDialog弹窗中?
在Shiny弹窗中绑定Waitress进度条的解决方案
要让Waitress进度条仅显示在modalDialog弹窗上,核心是给弹窗添加唯一ID,然后让进度条绑定到该ID对应的元素。以下是修改后的可运行代码:
library(shiny) library(shinipsum) library(waiter) library(plotly) complicated_function <- function(){ # 绑定到ID为plot-modal的弹窗元素 waitress <- Waitress$new(selector = "#plot-modal", theme = "overlay-dark", min = 0, max = 20) for(i in 1:20){ waitress$inc(1) Sys.sleep(0.2) } waitress$close() return(random_ggplotly()) } ui <- fluidPage( useWaitress(), actionButton("plotButton", "Generate Plot") ) server <- function(input,output,session){ # 给modalDialog添加唯一ID:plot-modal modal1 <- modalDialog( renderPlotly({ complicated_function() }), id = "plot-modal" ) observeEvent(input$plotButton,{ showModal(modal1) }) } shinyApp(ui, server)
关键改动说明:
- 给弹窗添加ID:在
modalDialog()中加入id = "plot-modal",这是让进度条定位到弹窗的核心前提 - 绑定进度条到弹窗:在
Waitress$new()中指定selector = "#plot-modal",告诉进度条只覆盖该ID对应的元素 - 优化进度条样式:将theme改为
overlay-dark,让进度条在弹窗背景上更清晰(可根据需求调整)
这样修改后,进度条就只会在弹窗区域内显示,不会覆盖整个页面。
内容的提问来源于stack exchange,提问作者king_of_limes
相关产品推荐
相关产品推荐

