在R Shining应用程序中检测左键或右键单击传单
我希望在有光泽的传单对象中有两个distincts操作,这取决于在多边形上单击鼠标右键还是单击鼠标左键 我有两个初始化值为1的多边形。我想在用户左键单击多边形时增加+1的值,在用户右键单击时减少-1的值。如果在R Shining中无法右键单击,则可能是左键双击。这里的目标是检测多边形上的两次不同单击,以便在单击后执行两次不同的操作 有一个我正在做的可复制的例子:左键单击做得很好,多边形的值在左键单击时递增。 现在我想让注释后的代码正常工作,因为右键单击可以进行递减在R Shining应用程序中检测左键或右键单击传单,r,shiny,leaflet,spatial,R,Shiny,Leaflet,Spatial,我希望在有光泽的传单对象中有两个distincts操作,这取决于在多边形上单击鼠标右键还是单击鼠标左键 我有两个初始化值为1的多边形。我想在用户左键单击多边形时增加+1的值,在用户右键单击时减少-1的值。如果在R Shining中无法右键单击,则可能是左键双击。这里的目标是检测多边形上的两次不同单击,以便在单击后执行两次不同的操作 有一个我正在做的可复制的例子:左键单击做得很好,多边形的值在左键单击时递增。 现在我想让注释后的代码正常工作,因为右键单击可以进行递减 library(shiny)
library(shiny)
library(leaflet)
library(sp)
## create two square polygons
Sr1 <- Polygon(cbind(c(1, 2, 2, 1, 1), c(1, 1, 2, 2, 1)))
Sr2 <- Polygon(cbind(c(2, 3, 3, 2, 2), c(1, 1, 2, 2, 1)))
Srs1 <- Polygons(list(Sr1), "s1")
Srs2 <- Polygons(list(Sr2), "s2")
SpP <- SpatialPolygons(list(Srs1, Srs2), 1:2)
ui <- fluidPage(
titlePanel("Left or right click"),
sidebarLayout(
sidebarPanel(),
mainPanel(
leafletOutput("myMap")
)
)
)
server <- function(input, output) {
## Polygon data
SPDF <- reactiveValues(
df = SpatialPolygonsDataFrame(SpP, data = data.frame(
ID = c(1, 2),
display = c(1, 1)
), match.ID = FALSE)
)
## generate leaflet output with two simple polygons
output$myMap <- renderLeaflet({
SpDf <- SPDF$df
leaflet(options = leafletOptions( zoomControl = FALSE, minZoom = 6.2, maxZoom = 6.2, dragging = FALSE)) %>%
addPolygons(
data = SpDf,
label = as.character(SpDf$display),
layerId = SpDf$ID,
labelOptions = labelOptions(noHide = T, textOnly = T, textsize = "15px", direction = "center")
)
})
## incremente when left click : OK
observeEvent(input$myMap_shape_click, {
SpDf <- SPDF$df
SpDf$display[SpDf$ID == input$myMap_shape_click$id] <- SpDf$display[SpDf$ID == input$myMap_shape_click$id] + 1
SPDF$df <- SpDf
})
## decremente when right click (or double click if right click not possible) : HOW ?
# observeEvent(input$??????,{
# SpDf <- SPDF$df
# # incremente when left click
# SpDf$display[SpDf$ID == input$myMap_shape_click$id] <- SpDf$display[SpDf$ID == input$myMap_shape_click$id] - 1
# SPDF$df <- SpDf
# })
}
shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(单张)
图书馆(sp)
##创建两个方形多边形
Sr1我终于找到了一种方法,也许不是最好的,因为我不习惯Javascript
library(shiny)
library(leaflet)
library(sp)
library(shinyjs)
## create two square polygons
Sr1 <- Polygon(cbind(c(1, 2, 2, 1, 1), c(1, 1, 2, 2, 1)))
Sr2 <- Polygon(cbind(c(2, 3, 3, 2, 2), c(1, 1, 2, 2, 1)))
Srs1 <- Polygons(list(Sr1), "s1")
Srs2 <- Polygons(list(Sr2), "s2")
SpP <- SpatialPolygons(list(Srs1, Srs2), 1:2)
ui <- fluidPage(
titlePanel("Left or right click"),
useShinyjs(),
sidebarLayout(
sidebarPanel(),
mainPanel(
leafletOutput("myMap"),
tags$script(
"$(function(){
$(myMap).on('contextmenu', 'path', function (e) {
e.preventDefault();
// get class name
var id = $(e.currentTarget).attr('class').match(/id-\\d+/)[0];
var right_click = {'count':Math.random(), 'id':id};
Shiny.setInputValue('right_click', right_click);
});
});"
)
)
)
)
server <- function(input, output) {
## Polygon data
SPDF <- reactiveValues(
df = SpatialPolygonsDataFrame(SpP, data = data.frame(
ID = paste0("id-", 1:2),
display = c(1, 1)
), match.ID = FALSE)
)
## generate leaflet output with two simple polygons
output$myMap <- renderLeaflet({
SpDf <- SPDF$df
leaflet(options = leafletOptions(zoomControl = FALSE, minZoom = 6.2, maxZoom = 6.2, dragging = FALSE)) %>%
addPolygons(
data = SpDf,
label = as.character(SpDf$display),
layerId = SpDf$ID,
options = pathOptions(className = SpDf$ID), # give a CSS class per polygon so it can be get by JS
labelOptions = labelOptions(noHide = T, textOnly = T, textsize = "15px", direction = "center")
)
})
## incremente when left click : OK
observeEvent(input$myMap_shape_click, {
SpDf <- SPDF$df
SpDf$display[SpDf$ID == input$myMap_shape_click$id] <- SpDf$display[SpDf$ID == input$myMap_shape_click$id] + 1
SPDF$df <- SpDf
})
## decremente when right click
observeEvent(input$right_click, {
SpDf <- SPDF$df
# incremente when left click
SpDf$display[SpDf$ID == input$right_click$id] <- SpDf$display[SpDf$ID == input$right_click$id] - 1
SPDF$df <- SpDf
})
}
shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(单张)
图书馆(sp)
图书馆(shinyjs)
##创建两个方形多边形
Sr1