mapbox gl js禁用控件

Posted

技术标签:

【中文标题】mapbox gl js禁用控件【英文标题】:mapbox gl js disable controls 【发布时间】:2017-03-14 00:36:14 【问题描述】:

有没有办法隐藏/删除或禁用控件,例如 mapbox-gl-draw 中的控件?

我添加绘图控件如下

    draw = mapboxgl.Draw(
    drawing: true,
    displayControlsDefault: false,
    controls: 
        polygon: true,
        trash: true
    
);

map.addControl(draw);

一旦绘制了一个多边形,我想禁用或隐藏控件,因此不再可能绘制另一个多边形。

非常感谢!

格雷戈

【问题讨论】:

【参考方案1】:

您实际上可以通过一点 DOM 交互来禁用绘制按钮(单独或作为一组)。简而言之,您可以找到绘制菜单的原生 CSS 类('mapbox-gl-draw_polygon''mapbox-gl-draw_point' 等),添加 disabled 属性,并添加带有“禁用”/灰色样式的 CSS 类。此处示例:https://jsfiddle.net/emLs72zj/9/

// html

<div id="map">

</div>
<button id="disable-draw">
Disable Draw Btns
</button>

<button id="enable-draw">
Enable Draw Btns
</button>


// CSS

body  margin:0; padding:0; overflow:hidden;
#map  position:absolute; top:20px; bottom:0; width:100%; 

.disabled-button 
  -webkit-filter: opacity(.3) drop-shadow(0 0 0 #FFF);
  filter: opacity(.3) drop-shadow(0 0 0 #FFF);
  cursor: default !important;



// JS

mapboxgl.accessToken = 'pk.eyJ1IjoieXVuamllIiwiYSI6ImNpZnd0ZjZkczNjNHd0Mm0xcGRoc21nY28ifQ.8lFXo9aC9PfoKQF9ywWW-g';
var sfmapbox = [-122.413692, 37.775712];

// Create a new dark theme map
var map = new mapboxgl.Map(
  container: 'map', // container id
  style: 'mapbox://styles/mapbox/outdoors-v9', //stylesheet location
  center: sfmapbox, // starting position
  zoom: 12, // starting zoom
  minZoom: 11,
);

map.on('load', function()
        // create control
    var draw = mapboxgl.Draw(
        drawing: true,
        displayControlsDefault: false,
        controls: 
            polygon: true,
            trash: true
        
    );
    // add control to map
    map.addControl(draw);

    var disableBtn = document.getElementById('disable-draw');
    var enableBtn = document.getElementById('enable-draw');

    var drawPolygon = document.getElementsByClassName('mapbox-gl-draw_polygon');

    disableBtn.onclick = (e) => 
        drawPolygon[0].disabled = true;
  drawPolygon[0].classList.add('disabled-button');
;

enableBtn.onclick = (e) => 
    drawPolygon[0].disabled = false;
  drawPolygon[0].classList.remove('disabled-button');
;
)

【讨论】:

【参考方案2】:

目前你应该在 2020 年使用

mapboxDraw = new MapboxDraw(.... map.addControl(mapboxDraw); map.removeControl(mapboxDraw);

【讨论】:

重要的是要考虑map.removeControl(mapboxDraw); 也会删除您绘制的任何多边形。因此,对于您可能希望像在状态机中一样控制事物的用例,您可能希望保留绘制的多边形,而只是隐藏绘制控件。因此,这个答案可能并不适合所有人。【参考方案3】:

控件的remove方法没有绑定到map对象,但是你可以通过在控件对象上调用remove()来移除它。 https://jsfiddle.net/9o9mknqh/

// create control
var draw = mapboxgl.Draw(
    drawing: true,
    displayControlsDefault: false,
    controls: 
        polygon: true,
        trash: true
    
);
// add control to map
map.addControl(draw);

// remove control from map
draw.remove()

【讨论】:

以上是关于mapbox gl js禁用控件的主要内容,如果未能解决你的问题,请参考以下文章

在mapbox-gl-js中居中文本标签?

Mapbox GL js 可用图标

mapbox-gl-js 围绕 lat/lng 创建一个扇区?

我可以使用传单插件和mapbox gl js吗?

mapbox gl改变图标颜色

在 Mapbox-GL-JS 中 minzoom 和 maxzoom 到底做了啥?