gpt4 book ai didi

以 Shiny 的方式注册重复的键盘按键

转载 作者:行者123 更新时间:2023-12-05 00:19:28 25 4
gpt4 key购买 nike

我正在尝试构建一个捕获键盘按下的应用程序,但是我遇到了一个问题,如果连续使用相同的键盘按下,那么 Shiny 似乎没有注册输入。想知道是否有办法解决这个问题。

例如,这就是我的意思。

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

output$results = renderPrint({
print(rnorm(1))
c(input$down, input$up)
})
}
))

在键盘上键入/释放不同的字符会生成新的输入,因此当这些事件发生时会调用随机数生成器。但是打字,比如说, 'g' 'g' 'g'只记录第一个上下击键并忽略其余的。

最佳答案

Shiny.onInputChange仅当它引用的 js 对象发生变化时才会使用react,但是您编写 js 的方式是通过多次按下相同的键将值重新分配给同一事物。
一个丑陋的解决方法可能是将变量设置为按键和数组中的随机浮点数。

library(shiny)
runApp( list(ui = bootstrapPage(
verbatimTextOutput("results"),
tags$script('
$(document).on("keydown", function (e) {

Shiny.onInputChange("down", [e.which,Math.random()]);
});'),
tags$script('
$(document).on("keyup", function (e) {

Shiny.onInputChange("up", [e.which,Math.random()]);
});')
)
, server = function(input, output, session) {

output$results = renderPrint({
print(rnorm(1))
c(input$down[1], input$up[1])
})
}
))

消除生成随机数的需要并传回一些可能有用的信息可能更有效。例如,使用时间戳属性,您可以对按键进行一些过滤。
library(shiny)
runApp( list(ui = bootstrapPage(
verbatimTextOutput("results"),
tags$script('
$(document).on("keydown", function (e) {

Shiny.onInputChange("down", [e.which,e.timeStamp]);
});'),
tags$script('
$(document).on("keyup", function (e) {

Shiny.onInputChange("up", [e.which,e.timeStamp]);
});')
)
, server = function(input, output, session) {

output$results = renderPrint({
print(rnorm(1))
c(input$down[1], input$up[1])
})
}
))

关于以 Shiny 的方式注册重复的键盘按键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35831811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com