You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R Shiny的两个放置区间拖拽元素的问题求助

解决Shiny拖拽功能的两个问题

针对你遇到的两个问题,以下是具体解决方案和修改后的代码:

问题1:启动时将元素默认放入放置区

将dragUI组件直接嵌套在目标dropUI内部,而非放在外部通过margin隐藏,应用启动时元素就会自动出现在指定放置区中。

问题2:让放置区填充至网页底部

为dropUI添加自定义CSS样式,用calc()计算剩余高度(减去标题和输出区域的占用高度),同时设置滚动属性确保内容过多时可正常浏览,实现放置区填满页面底部的效果。

修改后的完整代码

library(shiny)
library(shinyDND)

ui <- shinyUI(fillPage(
  fillRow(
    sidebarLayout(
      sidebarPanel(
        h1("Side panel"),
        dropUI(
          "side_panel", 
          row_n = 2, 
          col_n = 1,
          style = "height: calc(100vh - 150px); border: 1px solid #ccc; overflow-y: auto;"
        ),
        br(),
        verbatimTextOutput("side"),
        width = 6
      ),
      mainPanel(
        h1("Main panel"),
        dropUI(
          "main_panel", 
          row_n = 2, 
          col_n = 6,
          style = "height: calc(100vh - 150px); border: 1px solid #ccc; overflow-y: auto;",
          # 将拖拽元素直接放入放置区
          div(dragUI("div6", "A")),
          div(dragUI("div6", "B")),
          div(dragUI("div5", "C"))
        ),
        br(),
        verbatimTextOutput("main"),
        width = 6
      ),
      position = "right",
      fluid = FALSE
    )
  )
))

server = shinyServer(function(input, output,session) {
  observeEvent(input$main_panel,{
    output$main = renderText(
      paste("The main dropUI element currently contains:", input$main_panel, sep = " "))
  })
  observeEvent(input$side_panel,{
    output$side = renderText(
      paste("The side dropUI element currently contains:", input$side_panel, sep = " "))
  })
})

shinyApp(ui = ui, server = server)

内容的提问来源于stack exchange,提问作者leparc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 23:41:24