Я создаю игру в Shiny, которая нуждается в точных измерениях времени, которое пользователь нажимает на фотографию (в идеале с точностью до сотой доли секунды, но сработала бы и десятая часть секунды).
Время сервера является функцией интернет-соединения, которое может быть медленным с задержкой, а что нет. Поэтому я хотел бы получить доступ к времени на компьютере клиента.
Я могу получить системное время сервера одним нажатием кнопки. Я также могу получить системное время клиента при запуске блестящего приложения (с использованием Java), но я не могу получить системное время клиента для каждого клика. Тем не менее, я получаю то, что кажется NA при первом клике, а затем время предыдущего клика. Есть мысли?
(Пример ниже основан на нажатии кнопки для простоты.)
EDITED (я реализовал Shiny.onInputChange
и изменил время разбора)
library(shiny)
library(shinyjs)
if (interactive()) {
ui <- shinyUI(
fluidPage(
useShinyjs(),
verbatimTextOutput("clientTime"),
verbatimTextOutput("serverTime"),
HTML('<input type="text" id="client_time" name="client_time" style="display: none;"> '),
actionButton("btn1","Click to see times")
))
server <- function(input, output){
# this block fires each time we receive a message from JavaScript
output$text <- renderText({
req(input$count)
paste("you clicked", input$count, "times on the RStudio ball")
})
observeEvent(input$btn1,
{
shinyjs::runjs(
'
$(function() {
var time_now = new Date();
Shiny.onInputChange("client_time", time_now)
});
')
times <- as.POSIXct(
input$client_time,
format = "%Y-%m-%dT%H:%M:%OS")
times <- paste("Client Time:", format(times, "%Y-%m-%d %H:%M:%OS3"))
output$clientTime <- renderText(times)
servertimes <- Sys.time()
servertimes <- paste("Server Time:", format(servertimes, "%Y-%m-%d %H:%M:%OS3"))
output$serverTime <- renderText(servertimes)
})
}
shinyApp(ui = ui, server = server) }