R Shiny键输入绑定

rei*_*son 17 r shiny

在Shiny应用程序中,是否可以使用绑定来监听用户按下的键?

我不太熟悉JavaScript,但我正在寻找类似的东西:

window.onkeydown = function (e) {
    var code = e.keyCode ? e.keyCode : e.which;
    alert(code);
};
Run Code Online (Sandbox Code Playgroud)

然后在其中使用键输入server.R,例如:

shinyServer(function(input, output) {

  output$text <- renderText({
    paste('You have pressed the following key:', input$key)
  })

  # ...

})
Run Code Online (Sandbox Code Playgroud)

jdh*_*son 25

您可以为按键添加侦听器.的Shiny.onInputChange可用于结合按压到有光泽的变量的关键是:

library(shiny)
runApp( list(ui = bootstrapPage(
  verbatimTextOutput("results"),
  tags$script('
    $(document).on("keypress", function (e) {
       Shiny.onInputChange("mydata", e.which);
    });
  ') 
)
, server = function(input, output, session) {

  output$results = renderPrint({
    input$mydata
  })
}
))
Run Code Online (Sandbox Code Playgroud)

对于keydown可以替代的事件:

  tags$script('
    $(document).on("keydown", function (e) {
       Shiny.onInputChange("mydata", e.which);
    });
  ') 
Run Code Online (Sandbox Code Playgroud)

  • 嗨,感谢这个伟大的解决方案。顺便说一句,当你需要使用`shinydashboard`页面时,`tag$script`部分需要放在`dashboardBody`部分内。 (2认同)

tyl*_*uRp 5

我一直在开发一个 R 包{keys}来解决这个问题。它基本上是Mousetrap javascript 库的包装器。这样,观察按键就变得很容易了:

library(shiny)
library(keys)

hotkeys <- c(
  "1", 
  "command+shift+k", 
  "up up down down left right left right b a enter"
)

ui <- fluidPage(
  useKeys(),
  keysInput("keys", hotkeys)
)

server <- function(input, output, session) {
  observeEvent(input$keys, {
    print(input$keys)
  })
}

shinyApp(ui, server)
Run Code Online (Sandbox Code Playgroud)

更多信息请参见: https: //github.com/r4fun/keys