有没有办法只在点击地图后才启用鼠标滚轮缩放?

问题描述 投票:0回答:2

有没有办法仅在第一次单击地图后启用鼠标滚轮缩放。

我有以下代码,其中我只想在单击地图后缩放地图。有没有办法在闪亮的情况下做到这一点?

library(shiny)
library(leaflet)
library(maps)

ui <- fluidPage(
 leafletOutput("CountryMap", width = 1000, height = 500)
)

server <- function(input, output){
   Country = map("world", fill = TRUE, plot = FALSE, regions="USA", exact=TRUE)
   output$CountryMap <- renderLeaflet({
   leaflet(Country) %>% addTiles() %>%
   fitBounds(Country$range[1], Country$range[3], Country$range[2], Country$range[4])%>%
   addPolygons(fillOpacity = 0.6,  smoothFactor = 0.5, stroke = TRUE, weight = 1)
})
}

shinyApp(ui =ui, server = server)
r shiny r-leaflet
2个回答
4
投票

我非常喜欢warmoverflow的想法,因为它纯粹是在R端并且非常容易理解。我刚刚才看到他已经回答了你的问题。但由于我已经研究了另一个解决方案,我也可以将其发布在这里。有多种选择并没有坏处。

我生成了一个 JavaScript 解决方案,可以查找 leaflet

map
元素并更改
scrollWheelZoom
属性。这非常简单,因为您只需在启动时
disable
滚动缩放,并在第一次单击地图后立即
enable
即可。但是传单人员通过解决另一个问题使事情变得更加困难。在那里,他们(除了其他东西)添加了一个监听器,每当鼠标移动时,它就会滚动缩放(非常烦人)。因此,在我的修复中,我们向文档添加一个
enables
,同时将鼠标移动事件的侦听器添加到
script
(从而取消
disable
属性的
enable
)。当第一次单击
scrollWheelZoom
时,该事件侦听器将被删除,因此您可以使用正常(默认)缩放选项。

下面的脚本代码:

map



2
投票
https://github.com/rstudio/leaflet/issues/179

禁用

library(shiny)
library(leaflet)
library(maps)

ui <- fluidPage(
  leafletOutput("CountryMap", width = 1000, height = 500),
  tags$script("
    $(document).ready(function() {    
      setTimeout(function() {

        var map = $('#CountryMap').data('leaflet-map');            
        function disableZoom(e) {map.scrollWheelZoom.disable();}

        $(document).on('mousemove', '*', disableZoom);

        map.on('click', function() {
          $(document).off('mousemove', '*', disableZoom);
          map.scrollWheelZoom.enable();
        });
      }, 100);
    })
  ")
)

server <- function(input, output, session){

  Country = map("world", fill = TRUE, plot = FALSE, regions="USA", exact=TRUE)
  output$CountryMap <- renderLeaflet({
     leaflet(Country) %>% addTiles() %>%
     fitBounds(Country$range[1], Country$range[3], Country$range[2], Country$range[4])%>%
     addPolygons(fillOpacity = 0.6,  smoothFactor = 0.5, stroke = TRUE, weight = 1)
  })
}

shinyApp(ui =ui, server = server)
zoomControl
的选项,但受到 Yihui 从链接中的建议的启发,这里是一种根据鼠标单击事件动态更改 mouseWheelControl 级别的解决方法。

maxZoom

	
© www.soinside.com 2019 - 2024. All rights reserved.