【问题标题】:How to expand/collapse the shiny dashboard sidebar on mouse hover?如何在鼠标悬停时展开/折叠闪亮的仪表板侧边栏?
【发布时间】:2020-05-26 21:04:48
【问题描述】:

在闪亮的仪表板中,我希望鼠标悬停在迷你侧边栏上以展开它。当鼠标离开侧边栏时,它会自动折叠到原始状态(迷你侧边栏)。

我现在得到的最接近的答案是使用展开/折叠默认按钮功能和使用 JQuery 的鼠标悬停(参见下面的代码),但我希望这种效果能够扩展到整个侧边栏(感谢 @987654321 @)

我想这样做的一种方法是在侧边栏鼠标悬停时触发 a.sidebar-toggle 单击操作,但我一直无法找到侧边栏对象类来观察鼠标悬停在其上。

tags$head(tags$script(HTML("$(function() {$('the sidebar object').mouseover(function(e) { $(a.sidebar-toggle).click()})});")))

小例子:

library(shiny)
library(shinydashboard)
library(shinydashboardPlus)
shinyApp(
  ui = dashboardPagePlus(
    header = dashboardHeaderPlus(
      enable_rightsidebar = TRUE,
      rightSidebarIcon = "gears"
    ),
    sidebar = dashboardSidebar(
      sidebarMenu(
        menuItem("DASHBOARD1", tabName = "Spectrum", icon = icon("table")
        ), #menuItem
        menuItem("DASHBOARD2", tabName = "LTE", icon = icon("mobile-alt"))        
      )),
    body = dashboardBody(),
    title = "TEST",
    tags$head(tags$script(HTML("$(function() { $('a.sidebar-toggle').mouseover(function(e) { $(this).click()})});"))),

  ),
  server = function(input, output) { }
)

【问题讨论】:

  • 请检查我的回答。

标签: javascript jquery css r shiny


【解决方案1】:

这是一个library(shinyjs) 解决方案:

library(shiny)
library(shinydashboard)
library(shinydashboardPlus)
library(shinyjs)

shinyApp(
  ui = dashboardPagePlus(
    header = dashboardHeaderPlus(enable_rightsidebar = TRUE,
                                 rightSidebarIcon = "gears"),
    sidebar = dashboardSidebar(
      sidebarMenu(
        id = "sidebar_id",
        menuItem("DASHBOARD1", tabName = "Spectrum", icon = icon("table")),
        menuItem("DASHBOARD2", tabName = "LTE", icon = icon("mobile-alt"))
      )
    ),
    body = dashboardBody(
      useShinyjs()
      ),
    title = "TEST"
  ),
  server = function(input, output, session) {
    onevent("mouseenter", "sidebarCollapsed", shinyjs::removeCssClass(selector = "body", class = "sidebar-collapse"))
    onevent("mouseleave", "sidebarCollapsed", shinyjs::addCssClass(selector = "body", class = "sidebar-collapse"))
  }
)


编辑:

正如@yeahman269 所提到的,这现在是图书馆的官方功能(shinydashboardPlus)。它可以通过使用选项sidebarExpandOnHover = TRUE 来激活。但是,我只是 filed an issue 关于这个功能。

library(shiny)
library(shinydashboard)
library(shinydashboardPlus)
shinyApp(
   ui = dashboardPage(
     options = list(sidebarExpandOnHover = TRUE),
     header = dashboardHeader(),
     sidebar = dashboardSidebar(minified = TRUE, collapsed = TRUE),
     body = dashboardBody(
      lapply(1:20, box, width = 12, title = "box")
     ),
     controlbar = dashboardControlbar(),
     title = "DashboardPage"
   ),
   server = function(input, output) { }
 )

示例取自here

【讨论】:

  • 你是老板!谢谢
  • 如果您将光标移到某个项目上,则会出现项目文本,从而导致文本超出侧边栏(第一微秒)。你有没有办法让文本只在侧边栏展开后才出现,而不是在之前出现以避免这种行为?
  • 我担心这是一般的shinydashboardPlus 行为。注释掉onevent 调用。并通过汉堡菜单按钮折叠侧边栏。您会看到,在悬停菜单项时,文本不断超出正文。你可能想report here - 但谁知道它可能是一个功能。
  • 嗨,我很好奇是否有人找到解决方法?
  • @fullera:shinydashboardPlus (2.0) 的新版本现在有一个集成的功能(我认为它甚至是默认的),你可能想检查一下。
猜你喜欢
  • 1970-01-01
  • 2018-09-25
  • 2019-11-13
  • 1970-01-01
  • 2020-10-21
  • 2019-12-21
  • 2021-09-05
  • 2016-11-11
  • 2017-06-28
相关资源
最近更新 更多