jQuery Mobile中的持久标头
无法找到一种方法来为我的旧问题提供赏金,所以我重新发布它,因为它可能是一个错误。
简短版本:我希望PhoneGap + JQM应用程序中的持久标头在页面转换之间保持原位(从不移动),就像页脚可以设计的那样。
长版:首先,我是jQuery和JQM的新手,所以请指出我所犯的任何新错误。
我正在尝试在应用程序中的不同页面之间保留一个标题。 当用户在页面之间转换时,它必须像持久的页脚一样保持在原位。 使用data-role =“footer”data-id =“(某些一致id)”data-position =“fixed”来实现持久页脚。 它运作得相当好(随机故障,因为它错位,然后几秒后自动修复)。 有关我正在寻找的内容的更多信息,请参阅此处的“持久页脚”: http : //jquerymobile.com/test/docs/#/test/docs/toolbars/docs-footers.html
并在下面的链接中查看持久页脚的示例。 了解如何选择页脚中的项目转换为全新页面,但页脚不会移动: http : //jquerymobile.com/test/docs/#/test/docs/toolbars/footer-persist-a.html
现在我正在尝试做同样的事情,但我希望它在应用程序的顶部而不是底部。 我尝试过以下的事情:
- 将页脚移动到页面顶部(不知道jQuery中要捕获的标记。尝试使用几个jQuery类的div。(jQuery类),但没有一个工作。我使用FireBug来确定它是“顶级”CSS属性需要改变。
每页上的HTML:
JavaScript:
$('div.ui-footer').css('top', '0px'); $('div.ui-footer-fixed').css('top', '0px'); $('div.fade').css('top', '0px'); $('div.ui-fixed-overlay').css('top', '0px'); $('div.ui-bar-a').css('top', '0px');
- 使用data-role =“header”(不像页脚那样持久)。 这个方法将创建我想要的标题(因为我覆盖了一些CSS),但是当我在页面之间转换时,它不会将标题保持在顶部。 JQM文档也没有声明它们支持持久标头,但它确实声明它支持持久页脚:
每页上的HTML:
一点点jquery就可以了
几天来,我一直在反对这个问题,而谷歌一直没有帮助。 我终于想出了以下解决方案。 它在转换开始之前将标题HTML复制到新页面,然后在转换完成后从上一页中删除代码。 页眉和页脚仍将随页面转换一起移动,但即使在导航嵌套列表时它们也会保留。
// dynamically move the header and footer between pages on load events $('div.ui-page').live('pagebeforeshow', function(event, ui) { // avoid duplicating the header on the first page load if (ui.prevPage.length == 0) return; // remove the jQuery Mobile-generated header $('.ui-header').addClass('to-remove-now'); $('#header').removeClass('to-remove-now'); $('.to-remove-now').remove(); // grab the code from the current header and footer header = $('#header')[0].outerHTML; footer = $('#footer')[0].outerHTML; // mark the existing header and footer for deletion $('#header').addClass('to-remove'); $('#footer').addClass('to-remove'); // prepend the header and append the footer to the generated HTML event.currentTarget.innerHTML = header + event.currentTarget.innerHTML + footer; }); // remove header from previous page $('div.ui-page').live('pagehide', function(event, ui) { $('.to-remove').remove(); });
然后只需将id="header"
添加到页眉div并将id="footer"
到页脚,然后像往常一样将它们放在内容中。
将以下css添加到您的页面或css文件的底部
请注意我没有在移动设备上测试此代码..
1)除了jquery.js之外,jquerymobile.js和.css文件还包括:jquery.easing.1.3.js,jquery.mobile.scrollview.js和scrollview.js。 (谷歌)
2)标准页眉,列表视图和页脚,样式属于以下内容:
... - List item 1
...
正如这里详细描述的那样 。
这里有一个使用页脚的例子: http : //jquerymobile.com/demos/1.0/docs/toolbars/footer-persist-a.html
我没有机会尝试一下,但它应该以标题的方式工作。
嗨,这可能会晚,但这对我有用。
[data-role=page] { min-height: 100%; height: auto !important; height: 100%; overflow: scroll; margin: 0 auto -40px; } .footerPlaceHolder { height: 40px; } [data-role=footer]{height:40px; bottom:0; position:fixed !important; top: auto !important; width:100%; z-index: 9999;}
你的HTML
PS请注意我不擅长这件事特别是css。 所有评论将不胜感激。
谢谢。
我试着调查jquery移动源,持续页脚的魔力发生在这里,我想。
$( document ).delegate( ".ui-page", "pagebeforeshow", function( event, ui ) { var page = $( event.target ), footer = page.find( ":jqmData(role='footer')" ), id = footer.data( "id" ), prevPage = ui.prevPage, prevFooter = prevPage && prevPage.find( ":jqmData(role='footer')" ), prevFooterMatches = prevFooter.length && prevFooter.jqmData( "id" ) === id; if ( id && prevFooterMatches ) { stickyFooter = footer; setTop( stickyFooter.removeClass( "fade in out" ).appendTo( $.mobile.pageContainer ) ); } }) .delegate( ".ui-page", "pageshow", function( event, ui ) { var $this = $( this ); if ( stickyFooter && stickyFooter.length ) { setTimeout(function() { setTop( stickyFooter.appendTo( $this ).addClass( "fade" ) ); stickyFooter = null; }, 500); } $.mobile.fixedToolbars.show( true, this ); });
我想补充一下
setTop( page.find( ":jqmData(role='header')").removeClass( "fade in out" ).appendTo( $.mobile.pageContainer ) );
它。 祝我好运 …
如果你可以使用一个单独的共享头,你可以在主页面中提供头:(注意:没有涉及jQuery,抱歉“只使用jQuery”伙伴:-p)
Your Page
然后使用CSS将每个页面的顶部向下推:
.ui-page{ top:64px !important; }
我对此并不满意!在那里很重要 ,但jQueryM在CSS中使用的规则具有最高的特异性,没有使用ID。 如果你知道你的所有身份证,你可能没有它…随意建议更好的其他规则..我已经击败了我的头,太长时间不在乎了。
我认为这是最近添加到JQM的。 http://view.jquerymobile.com/1.3.2/dist/demos/widgets/fixed-toolbars/footer-persist-a.html
此链接清楚地表明您可以将data-id属性添加到BOTH。 页眉和页脚。 但这对我不起作用。
编辑:我注意到,您必须打开持久标头的页面转换。 但过渡使应用程序放慢了太多……
检查此示例,在“使页脚和标题持久化”下。