Jquery 移动 - 向页面内容添加响应式 Leaflet 地图

Jquery Mobile - Adding a responsive Leaflet map to page content

我需要制作一个适合 JQM 页面的 Leaflet 映射,该页面还包含一个 header。问题是页面是可滚动的,如果不滚动我就看不到地图的底部。我需要整个页面适合 window 大小,没有任何滚动。

这是我目前的情况:

http://jsfiddle.net/51Lv7ppt/

<body>
    <div data-role="page" id="mapPage" data-theme="a"> 
        <div data-role="header" data-position="fixed" data-theme="a">
            <a id="backButton" href="#" data-rel="back" 
                data-transition="slide" data-direction="reverse">Back</a>
            <h1>Map</h1>
        </div> 

        <div id="map-content" data-role="content">
            <div id="map"></div>
        </div>
        <a id="curLoc" data-role="button" data-icon="location" data-iconpos="notext"></a>

    </div> 
</body>

css:

#mapPage, #map {
  height: 100%;
}

#map-content{
  height: 100%;
  padding: 0px; 
  margin:0px;
  z-index: -1;
}
#curLoc{
  position: absolute;
  bottom: 0;
  left: 10px;
}

当您将地图的包含元素全部设置为 100% 时,它将占用 body 的 100% 高度,这意味着包括 header,即 42px。但是 mapPage 元素在顶部填充了 42px,因为 header,所以它在底部有 42px 的额外空间。您可以使用 CSS calc 更正它。变化:

#mapPage, #map {
  height: 100%;
}

进入:

#mapPage {
  height: calc(100% - 42px);
}

#map {
  height: 100%;
}

现在 #mapPage 不会溢出底部的 42px,#map-content#map#mapPage 的 100%,即 100% - 42px;现在它像手套一样合身。

你的 Fiddle 的分支:http://jsfiddle.net/Lcu21pdn/

如果使用 calc 不适合您,您可以使用普通 javascript 或因为您正在使用 jQuery 来更正元素 mapPage 的高度已经,jQuery 在初始化地图之前:

var element = $('#mapPage');

element.height(element.height() - 42);

var map = L.map('map').setView([51.505, -0.09], 13);

你的 Fiddle 的另一个分支:http://jsfiddle.net/pjv22wgk/