这在 jQuery Mobile 中有点棘手,而页面宽度始终相同,页面高度会因页面事件而异。我不知道您对 jQuery Mobile 页面事件了解多少,简而言之,这些事件将在页面加载和页面转换期间发生(如果您想了解更多信息,请查看我的另一篇文章:jQuery移动设备:文档就绪与页面事件)。
现在让我们回到你的问题。jQM 页面内容永远不会占用整页内容,除非已经有足够的内容填充它并且我们不能采用 100% 宽度和 100% 高度的纯 css 方法。
为了解决这个问题,我们需要强制内容 div 占用完整的可用页面内容高度,可以使用这个函数来完成:
function getRealContentHeight() {
var header = $.mobile.activePage.find("div[data-role='header']:visible");
var footer = $.mobile.activePage.find("div[data-role='footer']:visible");
var content = $.mobile.activePage.find("div[data-role='content']:visible:visible");
var viewport_height = $(window).height();
var content_height = viewport_height - header.outerHeight() - footer.outerHeight();
if((content.outerHeight() - header.outerHeight() - footer.outerHeight()) <= viewport_height) {
content_height -= (content.outerHeight() - content.height());
}
return content_height;
}
我们将在 pageshow 页面事件期间使用此函数设置内容高度。并且图像将具有 100% 的宽度和 100% 的高度。
现在我们还需要修复图像 css,使其正确适合完整内容高度:
html,body{height:100%;}
img {
padding: 0 !important;
margin: 0 !important;
border: 0 !important;
overflow-y: hidden !important;
}
.ui-content {
padding: 0 !important;
}
.ui-content img {
max-height: 100%;/* Part 1: Set a maxium relative to the parent */
width: auto\9;
/* IE7-8 need help adjusting responsive images */
max-width: auto;
/* Part 2: Scale the height according to the width, otherwise you get stretching */
vertical-align: middle;
border: 0;
-ms-interpolation-mode: bicubic;
}
最后这是一个工作示例:http: //jsfiddle.net/Gajotres/yndsW/
编辑 :
看看我的另一种方法。我决定不使用 img 标签,而是使用背景图像并让 css 处理居中。仅需要 Javascript 来动态更改图像。
我们仍然需要 javascript 来修复我们的页面高度。
HTML:
<div data-role="page" id="Windage">
<div data-theme="a" data-role="header" data-position="fixed">
<h3>Header</h3>
</div>
<div data-role="content">
</div>
<div data-theme="a" data-role="footer" data-position="fixed">
<h3>
<a href="#" data-role="button" data-inline="true" data-transition="slide">NEXT</a>
</h3>
</div>
</div>
CSS:
html,body{
height:100%;
}
.ui-content {
background-repeat:no-repeat;
background-size:contain;
background-position: center center;
}
Javascript:
$(document).on('pageshow', '#Windage', function(){
$('[data-role="content"]').height(getRealContentHeight());
$('.ui-content').css('background-image','url(Image/timer.png)');
});
function getRealContentHeight() {
var header = $.mobile.activePage.find("div[data-role='header']:visible");
var footer = $.mobile.activePage.find("div[data-role='footer']:visible");
var content = $.mobile.activePage.find("div[data-role='content']:visible:visible");
var viewport_height = $(window).height();
var content_height = viewport_height - header.outerHeight() - footer.outerHeight();
if((content.outerHeight() - header.outerHeight() - footer.outerHeight()) <= viewport_height) {
content_height -= (content.outerHeight() - content.height());
}
return content_height;
}