我试图在Rshiny 中编程一个页面,让人们在观看完嵌入式视频之前不会向他们显示问题(代码如下).我试过几种方法,但我能想到的最直观的方法是延迟显示视频运行时的问题.

然而,我这里的当前代码从来没有显示radioButton()对象,无论我等待多长时间.如果有人能在我的工作中发现一个明显的错误,或者有更直观的方法来做到这一点,我洗耳恭听.

所需输出:一个radioButton对象,在经过指定的时间长度后出现.

return(div(fluidPage(
        HTML('<iframe width="560" height="315" src="https://www.youtube.com/embed/-CrOeCzMFSQ?si=3pKfFn_AnvVXKASX" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>'),
        br(),
        
        delay(ms = 200, show(radioButtons(
          "instructions",
          "Have you finished watching the instructions?",
          choices = list(
            "Yes" = 'finished_instructions'),
          width = '100%',
          selected = character(0))))

我已经try 了show()、showElement(),并且已经try 了大约一个工作日.还缺了点什么.我是一个shiny 的新手,所以如果有明显的工作在附近道歉.

推荐答案

这里也是一个shinyjs解决方案,只有当视频结束时才显示按钮(没有特定的延迟).

enter image description here

library(shiny)
library(shinyjs)

ui <- fluidPage(
  useShinyjs(),
  uiOutput("video"),
  hidden(
    radioButtons(
      "instructions",
      "Have you finished watching the instructions?",
      choices = list(
        "Yes" = 'finished_instructions'
      ),
      width = '100%',
      selected = character(0)
    )
  )
)
server <- function(input, output) {
  
  output$video <- renderUI({
    HTML(
      '<html>
        <body>
          <iframe id="my-iframe"
              width="560" height="315"
              src="https://www.youtube.com/embed/-CrOeCzMFSQ?si=3pKfFn_AnvVXKASX?&enablejsapi=1" 
              frameborder="0"
              allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen
          ></iframe>
          
          <script type="text/javascript">
            var tag = document.createElement("script");
            tag.src = "https://www.youtube.com/iframe_api";
            var firstScriptTag = document.getElementsByTagName("script")[0];
            firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

            var player;
            function onYouTubeIframeAPIReady() {
              player = new YT.Player("my-iframe");
              
              player.addEventListener("onStateChange", function(state){
                if (state.data === 0) {
                  document.getElementById("instructions").classList.remove("shinyjs-hide");
                }
              });
            }  
          </script>
        </body>
      </html>'
    )
  })
}

shinyApp(ui, server)

R相关问答推荐

使用rlang s arg_match判断函数输入列表

如何删除多个.CSV文件的行

如何使用R中的dhrr函数将李克特量表的因子列从长转换为宽?

带有叠加饼图系列的Highmap

使用geom_segment()对y轴排序

如何编辑gMarginal背景以匹配绘图背景?

在R gggplot2中是否有一种方法将绘图轴转换成连续的 colored颜色 尺度?

R spatstat Minkowski Sum()返回多个边界

计算数据帧中指定值之前的行数,仅基于每行之后的future 行,单位为r

从服务器在Shiny中一起渲染图标和文本

为什么我使用geom_density的绘图不能到达x轴?

如何使用前缀作为匹配来连接数据帧?

使用未知字符数(不受限制的最大长度)的Lookback有什么好的替代方案?

在R中,如何从一系列具有索引名的变量快速创建数据帧?

解析嵌套程度极高的地理数据

Rmarkdown::Render vs Source()

R仅当存在列时才发生变异

有没有办法将勾选/审查标记添加到R中的累积关联图中?

使用nls()函数的非线性模型的半正态图

具有某些列的唯一值的数据帧