R Markdown:隐藏剧透文本(悬停在文本元素上)

R Markdown: hide spoiler text (hover over text element)

是否可以在使用 R Markdown 创建的 .html 文件中隐藏文本块?文本元素应该隐藏,直到用户优先将鼠标悬停在文本上(或单击按钮)。要隐藏的元素不涉及代码块。目前我在 < p>

中包含文本

有人建议通过在每行前面加上“>!”来隐藏文本块,但 R Studio 无法识别这种 'markdown' 方法。它只是 returns 以 '!' 开头的文本块。不过,我更喜欢这种简单的 'hover' 方法,优于 Javascript 和按钮。

欢迎提出任何建议。谢谢。

这当然是可以的。有几种可能性,包括线性变换(动画淡入淡出)、按钮、无按钮等。

首先,这是一个使用 CSS 的简单方法。当没有悬停时,字体和背景颜色匹配,因此没有文本可见。悬停时背景变为白色,文本变为黑色。

---
title: "Hide Code Blocks"
author: "Martin Schmelzer"
date: "June 25, 2018"
output: html_document
---

<style>
hide {
  background-color: #d6d6d6;
  color: #d6d6d6;
}
hide:hover {
  background-color: white;
  color: black;
}
</style>

## R Markdown

<hide>This is a hidden text block!</hide>

我的建议是使用 CSS 完成此任务。

以下 Rmd 文件包含一些隐藏 spoiler class 元素的规则。您可能会发现其他方法 CSS:

---
output: html_document
---

```{css, echo=FALSE}
.spoiler {
  visibility: hidden;
}

.spoiler::before {
  visibility: visible;
  content: "Spoiler alert! Hover me to see the answer."
}

.spoiler:hover {
  visibility: visible;
}

.spoiler:hover::before {
  display: none;
}
```

You can insert a message in raw `HTML`:
<p class="spoiler">Answer</p>

A better approach is to use bracketed spans:  
[This is another answer]{.spoiler}

基于关于想要显示 kable 的 table 的附加部分,我查看了 htmltools 包中的一些函数来创建 HTML元素。我想出的方法是通过 js 代码块使用最少量的 Javascript。

基本上,我使用 shiny::actionButton 创建了一个按钮,并通过向 onclick 属性提供函数名称来附加一个 Javascript 单击处理程序。 knit table 位于 HTML 包装器内,因此它可以在 <div> 元素内作为容器正确呈现。此容器的 hidden property 最初设置为 true。

点击处理程序是唯一真正要编写的 Javascript,这是一个通过 ID 查找 <div> 并将其 hidden 属性 设置为 false 的函数.

RMarkdown:

---
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
```

```{r}
library(htmltools)

shiny::actionButton("show_table_button", 
                    label = "Show table", 
                    onclick = "button_handler()")

div(id = "tableContainer", 
    hidden = "true",
    HTML(knitr::kable(head(iris), format = "html")))
```

```{js}
function button_handler() {
  document.getElementById('tableContainer').hidden = false;
}
```

创建:

点击按钮后:

请注意,还有一些其他包用于在 R 中编写更复杂的 Javascript 代码——我没有使用过任何推荐的包——但我试图将这些包限制在你已经拥有的使用中任何 Shiny / HTML 相关的小部件。