2016-11-17 45 views
1

如何在R小冊子應用中添加滑塊,該應用控制特定圖層的不透明度?對於這個應用程序,我不想使用閃亮(這裏建議:adding sliders in R leaflet app),因爲它必須導出到獨立的html頁面。在R小冊子中添加不透明度滑塊

在下面的例子中,我有兩個CartoDB圖層,我想控制它們之一的不透明度,比如底圖圖層。

Leaflet.js - Set Opacity to LayerGroup with Slider包含如何添加這樣的滑塊的有用信息。此外,我發現可以使用htmlwidgets :: onRender函數將JavaScript代碼添加到htmlwidget。

所以我試圖跟隨下面的代碼,這是行不通的。該滑塊是可見的,但是沒有做任何事情。而且,拖動滑塊時地圖會平移。

library(leaflet) 
leaflet() %>% 
    addProviderTiles(provider = "CartoDB.PositronNoLabels", group="Basemap", layerId = 123) %>% 
    addTiles("http://{s}.basemaps.cartocdn.com/light_only_labels/{z}/{x}/{y}.png", group="Labels") %>% 
    addLayersControl(baseGroups="Basemap", overlayGroups = "Labels") %>% 
    addControl(html="<input id=\"slide\" type=\"range\" min=\"0\" max=\"1\" step=\"0.1\" value=\"1\" onchange=\"updateOpacity(this.value)\">") %>% 
    onRender(" 
    function updateOpacity(value) { 
     this.getLayer(123).opacity(value); 
    } 
    ") 

任何能幫助我的人?提前致謝!

+0

明天我會試着看看。 – timelyportfolio

回答

0

這是一個棘手的問題,我承認我不確定我的解決方案是否是正確的處理方式,但它對我有用。

library(leaflet) 
leaflet() %>% 
    addProviderTiles(provider = "CartoDB.PositronNoLabels", group="Basemap", layerId = 123) %>% 
    addTiles("http://{s}.basemaps.cartocdn.com/light_only_labels/{z}/{x}/{y}.png", group="Labels") %>% 
    addLayersControl(baseGroups="Basemap", overlayGroups = "Labels") %>% 
    addControl(html="<input id=\"slide\" type=\"range\" min=\"0\" max=\"1\" step=\"0.1\" value=\"1\">") %>% 
    onRender(" 
function(el,x,data){ 
    var map = this; 
    var evthandler = function(e){ 
    var labels = map.layerManager._byGroup.Labels; 
    Object.keys(labels).forEach(function(el){ 
     labels[el]._container.style.opacity = +e.target.value; 
    }); 
    }; 
    $('#slide').on('mousemove',L.DomEvent.stopPropagation); 
    $('#slide').on('input', evthandler); 
} 
    ") 
+0

Bhaskar Karambelkar爲不透明度https://twitter.com/bhaskar_vk/status/800857064847405057找到了一個小冊子插件,如果/當我們添加到leaflet.extras中,這可能會提供更強大的解決方案。 – timelyportfolio

+0

有關爲什麼此功能在Shiny內不起作用的任何見解?我將您的確切代碼放在基本的Shiny Leaflet應用程序中,而不是切換不透明度,拖動滑塊物理地平移地圖窗口。 – Lauren