【发布时间】:2021-06-25 06:36:59
【问题描述】:
我有一个闪亮的应用程序,带有侧边栏菜单和几个不同的选项卡。在每个选项卡中,有很多内容应该一起看到,所以选项卡很长,导航可能很痛苦,因为需要大量滚动。但是,将内容拆分为子选项卡不是一种选择。
因此,我尝试将“位置标记”作为虚假的子标签来导航,但我的努力没有成功。 我在这里尝试做的是使用闪亮功能 scroll.position 首先选择“位置标记”所在的选项卡,然后向下滚动到内容的位置。 如您所见,这种方法的问题在于,observeEvent 在函数内调用自身,因此永远不会在所需位置结束,而是转到该位置然后返回选项卡顶部。
这是我尝试做的一个最小的工作示例:
library(shiny)
library(shinydashboard)
library(shinyjs)
ui <- dashboardPage(
dashboardHeader(title = "Dashboard", titleWidth = 350),
dashboardSidebar(
width = 350,
disable = FALSE,
sidebarMenu(id = "Tabs",
menuItem(text = "This is basically just the header for the first tab",
tabName = "Tab_Menue",
menuSubItem(text = "This is the actual tab",
tabName = "Tab_1"
),
menuSubItem(text = "This is just for navigating the page",
tabName = "Not_an_actual_Tab_1"
)
),
menuItem(text = "This is the header for the 2nd tab",
tabName = "Tab_Menue",
menuSubItem(text = "This is the 2nd actual tab",
tabName = "Tab_2"
),
menuSubItem(text = "This is just for navigating the page in tab 2",
tabName = "Not_an_actual_Tab_2"
)
)
)
),
dashboardBody(
useShinyjs(),
extendShinyjs(text = 'shinyjs.scrollposition = function(y) {window.scrollTo(0, y)};',
functions = c("scrollposition")),
tabItems(
tabItem(
tabName = "Tab_1",
h2("Some content up here that I want to navigate to with Tab_1"),
br(), br(), br(), br(), br(), br(), br(), br(), br(), br(), br(),
br(), br(), br(), br(), br(), br(), br(), br(), br(), br(), br(),
br(), br(), br(), br(), br(), br(), br(), br(), br(), br(), br(),
br(), br(), br(), br(), br(), br(), br(), br(), br(), br(), br(),
h2("Some content on the same tab/page that I want to navigate to with Not_an_actual_Tab_1")
),
tabItem(
tabName = "Tab_2",
h2("Some content up here that I want to navigate to with Tab_2"),
br(), br(), br(), br(), br(), br(), br(), br(), br(), br(), br(),
br(), br(), br(), br(), br(), br(), br(), br(), br(), br(), br(),
br(), br(), br(), br(), br(), br(), br(), br(), br(), br(), br(),
br(), br(), br(), br(), br(), br(), br(), br(), br(), br(), br(),
h2("Some content on the same tab/page that I want to navigate to with Not_an_actual_Tab_2")
)
)
)
)
server <- function(input, output, session) {
observeEvent(input$Tabs, {
print(input$Tabs)
updateTabsetPanel(session, "Tabs", switch(input$Tabs,
"Not_an_actual_Tab_1" = "Tab_1",
"Not_an_actual_Tab_2" = "Tab_2",
input$Tabs)
)
js$scrollposition(switch(input$Tabs,
"Not_an_actual_Tab_1" = 900,
"Not_an_actual_Tab_2" = 900,
0)
)
})
}
shinyApp(ui = ui, server = server)
解决此问题的一种方法是阻止观察者从自身获取输入(我不知道如何)。 如果您有不同的解决方案,我会很高兴听到它们!
提前致谢!
【问题讨论】:
标签: r shiny shinydashboard