Hi I'm currently making a dashboard that renders an image when a user uploads an image in R Shiny. But, I want to move it around using the arrow keys and/or using an action button and the only solution I can find is by using Javascript, but I don't know how to properly integrate it with R shiny.
This is my code so far:
library(shiny)
library(shinydashboard)
library(base64enc)
shinyApp(
ui = fluidPage(
fluidRow(box(
width = 12,
fileInput(
"image",
"Choose an image:",
accept = ".jpeg"
),
column(12, actionButton("submit1", "Submit"), align = "right")
)),
uiOutput('avatar'),
actionButton("left", "", icon = icon("arrow-left")),
actionButton("right", "", icon = icon("arrow-right")),
actionButton("up", "", icon = icon("arrow-up")),
actionButton("down", "", icon = icon("arrow-down"))
),
server = function(input, output, session) {
base64 <- reactive(
if (input$submit1 == TRUE)
{inFile <- input$image
if(!is.null(inFile)){
dataURI(file = inFile$datapath, mime = "image/jpeg")
}}
)
output$avatar <- renderUI({
if(!is.null(base64())){
tags$div(
tags$img(src= base64(), width="100%"),
style = "width: 100px;"
)
}
})
}
)
This is what I found regarding the Javascript code about moving images using arrow keys (I don't know how to code in JavaScript so I'm lost):
$(document).on('keydown', function(e) {
// e stands for "event" - the event is the keypress
// e.key means the key that was pressed
switch (e.key) {
// left arrow pressed
case "ArrowLeft":
$('#zebra').animate({
left: "-=10px"
}, 'fast');
break;
// up arrow pressed
case "ArrowUp":
$('#zebra').animate({
top: "-=10px"
}, 'fast');
break;
// right arrow pressed
case "ArrowRight":
$('#zebra').animate({
left: "+=10px"
}, 'fast');
break;
// down arrow pressed
case "ArrowDown":
$('#zebra').animate({
top: "+=10px"
}, 'fast');
break;
}
});
The #zebra is the id of the image that is used by the user who wrote the Javascript code as an example.
Thank you!