컨텍스트 : jquery 모바일 페이지에서 사용 가능한 사용되지 않는 수직 미사용 공간을 계산하고 그 결과를 사용하여 요소의 크기를 조정하여 사용 가능한 최대 공간을 사용하려고합니다. .jquery 모바일을 사용하여 페이지 전환 끝에서 이벤트를 수신하는 방법
페이지가 보이지 않을 때 머리글, 바닥 글 및 내용 요소의 높이가 0으로 설정되어 있기 때문에 페이지가 전환 IN을 완료하기 전에 계산을 시작할 수 없습니다.
pageshow 이벤트를 사용하여 페이지 전환이 완료된 시점을 감지하고 계산을 수행하지만 사실상 51px 인 상태에서 전환이 완료되어야 할 때 바닥 글 높이가 여전히 0 인 것으로 나타났습니다. 또한 페이지 높이는 전환이 완전히 실행 된 경우가 아닌 창 또는 문서 높이보다 상당히 작은 높이를 반환합니다.
페이지 쇼 이벤트가 트리거 된 것은 사실이지만 페이지 이동은 실제로 완료되지 않은 것입니다. 문서에 따르면 완료된 경우에만 완료해야하며 일명 모든 요소의 최종 높이가 있어야합니다.
아무도 더 잘 알지 못하거나이 사건에 대한 나의 명백한 실수를 지적 할 수 있습니까?
나는 하드 코딩 된 값을 설정하여 내 문제를 해결했지만 작동 할 수있는 제네릭 함수를 작성하는 편이 훨씬 좋습니다. 자바 스크립트 코드의
...
<div data-role="page" id="pWhereAmI">
<div data-role="header" data-id="mainHeader" data-position="fixed">
<h1>Where Am I ?</h1>
</div>
<div data-role="content" class="map-content">
<ul data-role="listview" data-inset="true">
<li>Position Unknown</li>
<li id="map_canvas"></li>
<li>Center the map</li>
</ul>
</div>
<div data-role="footer" class="nav-glyphish-example" data-id="mainFooter" data-position="fixed">
<div data-role="navbar" class="nav-glyphish-example" data-grid="d">
<ul>
<li><a href="#pLogin" id="home" data-transition="fade" data-icon="custom"><small>Login</small></a></li>
</ul>
</div>
</div>
</div><!-- /page pWhereAmI -->
...
행사 :
$('#pWhereAmI').live('pageshow',function(event, ui) {
pageFreeHeight = pageFreeHeight_calc('#pWhereAmI');
map_canvasHeight = $('#map_canvas').height() + pageFreeHeight;
$('#map_canvas').height(map_canvasHeight);
});
의 pageshow 이벤트시에 호출되는 함수 :
function pageFreeHeight_calc(pageSelector) {
if($(pageSelector).height != null) {
pageHeight = $(pageSelector).height();
}
else {
return null;
}
if($(pageSelector+' [data-role|="header"]').outerHeight(true) != null) {
headerHeight = $(pageSelector+' [data-role|="header"]').outerHeight(true);
}
else {
headerHeight = 0;
}
if($(pageSelector+' [data-role|="content"]').outerHeight(true) != null) {
contentHeight = $(pageSelector+' [data-role|="content"]').outerHeight(true);
}
else {
contentHeight = 0;
}
if($(pageSelector+' [data-role|="footer"]').outerHeight(true) != null) {
footerHeight = $(pageSelector+' [data-role|="footer"]').outerHeight(true);
}
else {
footerHeight = 0;
}
return pageHeight - headerHeight - contentHeight - footerHeight;
}
필 필자, 필의 코드 변경 내용을 살펴본 결과 수정 된 코드에서 바닥 글 높이가 올바르게 반환되는 이유를 설명하는 내용이 실제로 표시되지는 않았지만 처음으로보고 된 페이지 높이가 올바르게 반환되지 않는다는 것을 알았습니다. WhereAmI 페이지로 이동하십시오. 두 번째로 사용할 수있는 공간을 적절하게 계산할 수 있습니다. 아직 너무 일찍 해고되는 showpage 이벤트의 시점입니다. .page()가 무엇인지, 문서에서 찾지 못했습니다. +1을 통해 솔루션에 한 걸음 더 가까이 다가 갈 수 있습니다. 감사. – Raymond
.page()는 동적 내용에 대한 jQM 마크 업/컨트롤을 새로 고칩니다. 당신은 또한 다음과 같이 새로운 create trigger를 시도 할 수 있습니다 : .trigger ('create') –
나는 프로세스에서 그 시간에 대한 올바른 값을 표시한다고 생각합니다. 그것은 운영의 순서입니다.먼저 "pageFreeHeight = pageFreeHeight_calc ('#pWhereAmI');" 이 경고/높이를 표시하지만 캔버스 크기를 조정하면 "map_canvasHeight = canvasHeight + pageFreeHeight;" 경고가 이미 표시되면 pageHeight가 변경됩니다. 캔버스 크기를 조정 한 후 올바른 크기임을 나타내는 또 다른 알림을 추가했습니다. –