如何使水平滚动条在 DT::datatable 中可见

Posted

技术标签:

【中文标题】如何使水平滚动条在 DT::datatable 中可见【英文标题】:How to make the horizontal scrollbar visible in DT::datatable 【发布时间】:2015-08-26 05:40:32 【问题描述】:

使用 R shiny & DT 包,我正在创建某些表。列数根据用户输入而有所不同,并且不固定。我已包含以下代码 sn-p 以包含水平滚动条,以便当列数很大时,用户可以滚动浏览不直接可见的列。

服务器.R:

output$results <- DT::renderDataTable(
    DT::datatable(data = datasetInput(),
                  options = list(scrollX = TRUE,...)
                  )
  )
<code reduced for brevity>

使用上面的代码,水平滚动条一开始是不可见的,但是当我单击一行并按键盘上的右箭头时会出现。有没有什么方法可以在表格启动后立即显示滚动条,无论我有多少列,并且我可以使用鼠标指针拖动滚动条?

更新

我尝试了下面答案中的代码,这就是我所看到的 - 没有水平滚动条。

【问题讨论】:

请始终提供您的 sessionInfo()。您没有说出来,但我猜您使用的是 Mac OS X。如果是这样,那就不足为奇了。这只是 Mac 的默认行为——滚动条默认隐藏,直到您开始滚动。 谢谢亿辉。没错,我使用的是 MacOSX。我会确保在未来提供我的 sessionInfo()。 我不经常使用 Mac,但我想可能有一种方法可以让滚动条始终可见。看看你是否对 Google 有任何好运... 【参考方案1】:

我也会这样做:

datasetInput1 <- reactive(
      infile <- input$file1
      if(is.null(infile))
        return(NULL) 
      else
        m <- read.csv(infile$datapath, header = input$header)
        return ( DT::datatable(m, extensions = 'Scroller', options = list(deferRender = F, dom = 't',
                                                                      columnDefs = list(list(className = 'dt-center',
                                                                                             targets = 5)),
                                                                     scrollY = 300, scroller = TRUE, scrollX = T,
                                                                     pageLength = 5))
               )
    )

【讨论】:

【参考方案2】:

试试这个:

DT::datatable(sta, options = list(
  pageLength=50, scrollX='400px'), filter = 'top')

【讨论】:

【参考方案3】:

如果您不需要滚动条,我认为您不能(或不应该)轻松地强制使用滚动条,但上面的代码对我来说很好,它会在页面初始化时显示滚动条。也许问题出在数据或其他方面。

这是一个在页面加载时具有水平滚动条的最小示例

runApp(shinyApp(
  ui = fluidPage(
    DT::dataTableOutput("results", width = 300)
  ),
  server = function(input, output, session) 
    output$results <- DT::renderDataTable(
      mtcars,
      options = list(scrollX = TRUE)
    )
  
))

【讨论】:

我的意思是滚动条在我的代码中有效,但在我点击一行并点击右箭头之前它是不可见的。它不可见,因此我无法使用鼠标指针拖动它。 我不知道有多少或是否重要,但我在DT::datatable 中使用选项,而您在DT::renderDataTable 中使用它。我猜这不是问题。但是如果不使用键盘,我仍然无法看到滚动条,并且绝对无法使用鼠标滚动。 你是对的,使用renderDataTabledatatable 中的选项没有区别。正如我所说,我怀疑问题不在于数据表,而在于您的数据集或导致此问题的代码的其他内容,因为像我展示的那样一个简单的示例确实有效。 我也试过你的代码,它没有显示水平滚动条。不知道是不是和我的浏览器有关系?我在我的问题中粘贴了屏幕截图。 确保您拥有最新的闪亮和 DT 版本。不是 CRAN 版本,而是 GItHub 版本,它们在过去 2 周里都做了很多工作,所以我会确保你使用的是本周的版本

以上是关于如何使水平滚动条在 DT::datatable 中可见的主要内容,如果未能解决你的问题,请参考以下文章

使 ScrollView 中的滚动条在 SwiftUI 中始终可见

使滚动条在uiscrollview中始终可见[重复]

css 滚动条在iOS中始终可见(垂直和水平)

如何使滚动条在 HtmlGenericControl("Div") 中工作

使滚动条在移动浏览器中可见

JQGrid当autowidth = true时,如何删除恼人的水平滚动条? (在IE中)