修改现有的MapView填充属性

时间:2018-10-25 01:33:24

标签: javascript arcgis-js-api

我正在构建一个带有侧边栏的应用程序,该边栏默认在桌面应用程序上打开,并使用4.9的ArcGIS JavaScript API可用的 padding example app)选项,我想边栏打开时,偏移屏幕的侧面。调整应用程序大小后,我想删除属性偏移并以某种方式刷新或重新加载原始视图。通过重新创建在地图上引起奇怪闪光的视图,我能够使它正常工作。我做了一个简单的jsfiddle,显示了与我想做的类似的事情。 https://jsfiddle.net/booshwa/t05ks1u4/。当用户单击“最新”按钮时,如果侧边栏处于打开状态,则会使用填充创建新视图;如果侧边栏处于隐藏状态,则会将填充设置为0。下面是jsfiddle中的JavaScript。

require([
  "esri/Map",
  "esri/views/MapView"
], function(
        Map,
         MapView
    ) {

  // Create the Map
  var map = new Map({
    basemap: "topo"
  });

  // Create the view set the view padding to be 320 px from the right
  var view = new MapView({
    container: "viewDiv",
    map: map,
    center: [-74.045459, 40.690083], // Liberty Island, NY, USA
    zoom: 16,
    padding: {
      right: 320 // Same value as the #sidebar width in CSS
    }
  });

  var sidebar_open = true;

  // Show / Hide the sidebar
  $("#toggle_sidebar").click(function() {
    if (sidebar_open) {
        $("#sidebar").css({display: "none"});
    } else {
        $("#sidebar").css({display: "block"});
    }
    sidebar_open = !sidebar_open;
  });

    // Builds a new view based on if the sidebar is open or closed
  $("#toggle_view").click(function() {
        var padding = 0;
        if (sidebar_open) {
        padding = 320;
    }

    // Recreate the view to make the padding reset
    // => Is this the only way to update a view?
    view = new MapView({
      container: "viewDiv",
      map: map,
      center: [-74.045459, 40.690083], // Liberty Island, NY, USA
      zoom: 16,
      padding: {
        right: padding // Same value as the #sidebar width in CSS
      }
    });

  });

});

1 个答案:

答案 0 :(得分:1)

您只需要修改视图的DMA_base_ptr[DMA_CONTROL_OFFS] &= ~HW; ,然后使用padding方法就可以将view.goTo进行更新,如下所示:

https://jsfiddle.net/t05ks1u4/55/

mapView