有没有办法仅在第一次单击地图后启用鼠标滚轮缩放。
我有以下代码,其中我只想在单击地图后缩放地图。有没有办法在闪亮的情况下做到这一点?
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)
我非常喜欢warmoverflow的想法,因为它纯粹是在R端并且非常容易理解。我刚刚才看到他已经回答了你的问题。但由于我已经研究了另一个解决方案,我也可以将其发布在这里。有多种选择并没有坏处。
我生成了一个 JavaScript 解决方案,可以查找 leaflet
map
元素并更改 scrollWheelZoom
属性。这非常简单,因为您只需在启动时 disable
滚动缩放,并在第一次单击地图后立即 enable
即可。但是传单人员通过解决另一个问题使事情变得更加困难。在那里,他们(除了其他东西)添加了一个监听器,每当鼠标移动时,它就会滚动缩放(非常烦人)。因此,在我的修复中,我们向文档添加一个 enables
,同时将鼠标移动事件的侦听器添加到 script
(从而取消 disable
属性的 enable
)。当第一次单击 scrollWheelZoom
时,该事件侦听器将被删除,因此您可以使用正常(默认)缩放选项。 下面的脚本代码:
map
禁用
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