- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Shiny 的仪表板,显示各种元素(highchart 和 ggplot 图、数据表)。用户可以按一些变量进行过滤以创建数据的“groupA”和“groupB”。GroupA 最初是所有数据,GroupB 最初是空的。当用户打开仪表板时,他们将看到 GroupA 的单列元素。通过过滤他们能够将一些数据移动到 groupB,这应该显示在新的第二列中。因此,A 组和 B 组中的每一个在页面上都有相同的元素,只是应用了不同的过滤器。如果 groupB 变空, View 将再次切换到 groupA 元素的单列。GroupA 的列应根据需要调整大小以覆盖整个宽度或宽度的一半。我很难让它以一种在代码上经济的方式工作。
答案here使用元素 ID 来显示和隐藏特定元素。这可行,但仪表板有很多页面,每页有很多元素。因此,这将涉及大量额外的代码。
我认为只需将每个元素放入一个 div 中,并将其类与组相对应,我就可以应用相同的想法,除了使用 CSS 选择器并一次性捕获所有元素。但这是行不通的。 CSS 选择器似乎没问题,例如当我在控制台的 jQuery 语句中使用它时,我得到了预期的元素。
为了简单起见,下面的代码只是用按钮来显示/隐藏 groupB 的问题的代表,而不是依赖于数据。
library(shiny)
library(shinyjs)
library(highcharter)
ui <- fluidPage(
useShinyjs(),
actionButton("hide","Hide Group B"),
actionButton("show","Show Group B"),
fluidRow(
div(class = "groupA col-sm-12", highchartOutput("plot1A")),
div(class = "groupB hidden", highchartOutput("plot1B"))
),
fluidRow(
div(class = "groupA col-sm-12", highchartOutput("plot2A")),
div(class = "groupB hidden", highchartOutput("plot2B"))
)
)
server <- function(input, output, session) {
output$plot1A <- output$plot2A <- renderHighchart({hchart(iris$Sepal.Length)})
output$plot1B <- output$plot2B <- renderHighchart({hchart(iris$Petal.Length)})
observeEvent(input$show, {
removeClass(selector = "div.groupA", "col-sm-12")
addClass( selector = "div.groupA", "col-sm-6")
removeClass(selector = "div.groupB", "hidden")
addClass( selector = "div.groupB", "col-sm-6")
})
observeEvent(input$hide, {
removeClass(selector = "div.groupA", "col-sm-6")
addClass( selector = "div.groupA", "col-sm-12")
removeClass(selector = "div.groupB", "col-sm-6")
addClass( selector = "div.groupB", "hidden")
})
}
shinyApp(ui, server)
任何人都可以建议如何使这项工作有效,或者甚至是可以有效地满足我需要的不同方法吗?
最佳答案
问题出在 removeClass
和 addClass
上,第一个位置参数是 id
,而不是 class。
要让它作为你要添加/删除的类,你需要写出参数名class = xxx
:
removeClass(selector = ".groupA", class = "col-sm-12")
添加所有 class
参数后,您会看到它正常工作,但仍未显示绘图。这是因为输出图在开始时没有高度。
默认情况下,shiny 不会渲染隐藏(高度为 0)的元素。您需要告诉 shiny 在 block 显示
后渲染它。要触发它,您需要通过 javascript 触发 element“显示”事件,但我们可以从 shinyjs 中完成。
隐藏元素后,您会看到 groupB 被隐藏,但 groupA 不会扩展该区域以覆盖整个宽度。这是因为 highcharter
不知道您进行了更改。您需要通过 window“resize”事件告诉它。
完整代码如下:
library(shiny)
library(shinyjs)
library(highcharter)
ui <- fluidPage(
useShinyjs(),
actionButton("hide","Hide Group B"),
actionButton("show","Show Group B"),
fluidRow(
div(class = "groupA col-sm-12", highchartOutput("plot1A")),
div(class = "groupB hidden", highchartOutput("plot1B"))
),
fluidRow(
div(class = "groupA col-sm-12", highchartOutput("plot2A")),
div(class = "groupB hidden", highchartOutput("plot2B"))
)
)
server <- function(input, output, session) {
output$plot1A <- output$plot2A <- renderHighchart({hchart(iris$Sepal.Length)})
output$plot1B <- output$plot2B <- renderHighchart({hchart(iris$Petal.Length)})
observeEvent(input$show, {
removeClass(selector = ".groupA", class = "col-sm-12")
addClass( selector = ".groupA", class = "col-sm-6")
removeClass(selector = ".groupB", class = "hidden")
addClass( selector = ".groupB", class = "col-sm-6")
show(selector = ".groupB")
})
observeEvent(input$hide, {
removeClass(selector = ".groupA", class = "col-sm-6")
addClass( selector = ".groupA", class = "col-sm-12")
removeClass(selector = ".groupB", class = "col-sm-6")
addClass( selector = ".groupB", class = "hidden")
runjs("$(window).trigger('resize')")
})
}
shinyApp(ui, server)
关于shiny - 如何使用 shinyjs 修改多个元素的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71467350/
我有一个 Shiny 的仪表板,显示各种元素(highchart 和 ggplot 图、数据表)。用户可以按一些变量进行过滤以创建数据的“groupA”和“groupB”。GroupA 最初是所有数据
我想在 Shiny 的应用程序启动时隐藏一个元素,但与 this example 不同,要隐藏的元素是可见的较大元素的一部分。 在此示例中,要在开始时隐藏的元素是绘图控件,它是传单 map 的一部分。
如 this 中所述链接 shinyjs 覆盖显示功能。据说在R3.3.0中已经解决了,但我仍然有这个问题。 DESeqdata sessionInfo() R version 3.3.3 (201
我希望能够使用 shinyjs 显示和隐藏来打开/关闭我的 UI 的各个部分。我需要从模块内访问模块外的部分 UI。这可能吗? 请参阅随附的应用程序代码。主服务器代码中的显示/隐藏按钮有效,但模块中的
我想知道是否可以在整个 shiny wellPanel 上使用 shinyjs 隐藏和显示功能?我有兴趣这样做以有条件地显示两个面板之一,据我所知,我不能在条件面板中使用 react 值。 下面是我的
我想知道是否可以在整个 shiny wellPanel 上使用 shinyjs 隐藏和显示功能?我有兴趣这样做以有条件地显示两个面板之一,据我所知,我不能在条件面板中使用 react 值。 下面是我的
这个问题与 navbarMenus 和 shinyjs 包的组合有关。我构建了一个 Shiny 的应用程序,并且还按照以下建议添加了用户登录:https://gist.github.com/withr
背景 在我的 shiny 模块中,我运行了一个冗长的计算。我想通过将光标更改为旋转圆圈来向用户提供一些视觉反馈。为此,我创建了一个 css 类 .wait 并希望在 body 上使用 shinyjs:
当我在本地运行我的应用程序时它完美运行,但是当我将它托管在 shinyapps.io 时出现此错误: An error has occurred The application failed to s
我正在为一个又大又笨重的 Shiny 仪表板维护我的代码,我注意到点击事件功能不再重置。 将其分解为一个最小的工作示例,并与来自 https://stackoverflow.com/a/4454320
当 input$Product !=A && input$month !="All" 使用 Shinyjs 包时,我试图禁用 Shiny 的应用程序单选按钮(“趋势”),但一直不成功。 我的ui页面定
我有一个我开发的 Shiny 应用程序的简化版本。我想要的是能够在按下 Frame1 actionbutton 时显示 dataframe1 并隐藏 dataframe2 并在按下 Frame2 ac
我可以友好地询问有关“shinyjs”包的问题吗? 我构建了一个 Shiny 的仪表板,我想使用“shinyjs”设置一个功能来控制菜单项的可见/不可见。 我设计的第一个菜单项/页面是为此仪表板选择数
我有一个用于自定义输入的 Shiny 模块,我正在尝试添加一个按钮以在每次单击此按钮时重置此自定义输入(界面和服务器)。下面是一个使用 shinyjs::reset 的例子: 应用.R lib
单击选项卡时尝试更新 flexdashboard 中的 Sidebar。无法正常工作。 --- title: "Test Sidebar" output: flexdashboard::flex_
我在 Shiny 的应用程序中使用函数 ggplot2::autoplot 和一个 lm 对象。 这要归功于 ggfortify 包。 在我 Shiny 的应用程序中,我还使用了 shinyjs。 在
我在 Shiny 的应用程序中使用函数 ggplot2::autoplot 和一个 lm 对象。 这要归功于 ggfortify 包。 在我 Shiny 的应用程序中,我还使用了 shinyjs。 在
编辑:我只需要更改intertUI选择器的命名空间!!会留给其他人。。我正在尝试使用shinyjs来控制文件输入的数量,一旦用户将文件上传到所有输入,它最终会显示一个曲线图。我一直无法让它作为更大的应
编辑:我只需要更改intertUI选择器的命名空间!!会留给其他人。。我正在尝试使用shinyjs来控制文件输入的数量,一旦用户将文件上传到所有输入,它最终会显示一个曲线图。我一直无法让它作为更大的应
我有一个 Shiny 的应用程序,它有一个打印屏幕按钮,但在更新了 Shinyjs 包后,代码不再有效。 我从 RShiny print current page 得到了这个解决方案它曾经有效,但不再
我是一名优秀的程序员,十分优秀!