5.7 会弹出的面板

严格地讲,将本节内容放在这里不是非常合适,但是jQuery Mobile文档中对本章要讲的面板控件也没有给出合适的定位,而笔者又不愿意为这样一节内容单独分出一章,再加上该控件确实适合用来实现导航栏相关的效果,因此就将这个内容放在了本章。先来看看图5-23所示的界面。

图5-23 手机人人网

这是手机人人网的一个界面,当登录人人网之后首先会显示好友们的“状态”列表,单击“返回”按钮将会出现如图5-23所示的界面,通过该界面的导航可以选择手机人人网的其他功能。这样的效果正是通过本节要介绍的面板控件来实现的,请看范例5-9。

【范例5-9 会弹出的工具栏】

        01   <! DOCTYPE html>                                         <! --声明HTML 5-->
        02
        03    <head>
        04    <meta  http-equiv="Content-Type"  content="text/html;  charset=utf-8"  />
    <! --声明编码方式-->
        05    <meta name="viewport" content="width=device-width, initial-scale=1">
        06   <! --<script src="cordova.js"></script>-->   <! --备用生成APP的JS文件-->
        07   <link  rel="stylesheet"  href="jquery.mobile.min.css"  /><! -- 引入  jQuery
    Mobile样式-->
        08   <script src="jquery-2.1.4.min.js"></script><! --引入jQuery脚本-->
        09   <script src="jquery.mobile.min.js"></script><! --引入jQuery Mobile脚本-->
        10    <script>
        11        $( "#mypanel" ).trigger( "updatelayout" ); <! --对面板进行声明-->
        12    </script>
        13    </head>
        14    <body>
        15         <div data-role="page">
        16             <div data-role="panel" id="mypanel">    <! --这个就是面板-->
        17                  <h4>这个就是面板</h4>                    <! --面板中加入内容-->
        18               </div>
        19               <div data-role="header" data-position="fixed">
        20                  <a href="#mypanel">打开</a>
        21                  <h1>头部栏</h1>
        22                  <a href="#">隐藏</a>
        23               </div>
        24               <div data-role="content">
        25                  <h1>面板可以弹出</h1>
        26                  <h1>面板可以弹出</h1>
        27                  <h1>面板可以弹出</h1>
        28                  <h1>面板可以弹出</h1>
        29                  <h1>面板可以弹出</h1>
        30                  <h1>面板可以弹出</h1>
        31                  <h1>面板可以弹出</h1>
        32                  <h1>面板可以弹出</h1>
        33                  <h1>面板可以弹出</h1>
        34                  <h1>面板可以弹出</h1>
        35                  <h1>面板可以弹出</h1>
        36                  <h1>面板可以弹出</h1>
        37                  <h1>面板可以弹出</h1>
        38                  <h1>面板可以弹出</h1>
        39               </div>
        40               <div data-role="footer" data-position="fixed">
        41                    <div data-role="navbar">
        42                          <ul>
        43                       <li><a id="chat" href="#" data-icon="plus">微信</a></li>
        44                       <li><a id="email" href="#" data-icon="plus">通讯录</a></li>
        45                       <li><a id="skull" href="#" data-icon="plus">找朋友</a></li>
        46                       <li><a id="beer" href="#" data-icon="plus">设置</a></li>
        47                          </ul>
        48                    </div>
        49               </div>
        50         </div>
        51    </body>
        52    </html>

运行结果分别如图5-24和图5-25所示。

图5-24 打开后的页面,面板未弹出

图5-25 面板被呼出展开显示

图5-24看上去与上一节的例子没什么不同,可是代码确实改变了,而且很明显在页面中加入了一个新的控件。

继续往下看会发现,笔者在头部栏做了一点小小的改动,原先的“返回”按钮被改成了“打开”,而且在代码第20行可以看到链接的目标地址也变成字符串“#mypanel”。这正是非常关键的一步,单击“打开”按钮之后,隐藏在侧面的面板突然侧滑显示出来了,效果如图5-25所示。

由于面板控件的使用相对比较复杂,因此笔者决定分步来描述面板控件的使用方法,以便于读者能够对面板控件的使用有一个清晰的认识。

打开上一节中给出的代码,在页面中任意位置(必须在page标签内,但是要在头部栏和尾部栏外)加入一个面板控件,格式如范例5-9中代码第16~18行所示,在面板控件中可以像一般页面一样加入内容。

给面板控件设置一个id,如本例中的id为mypanel。

插入一段JavaScript代码,声明该控件,如代码第10~12行所示。

在页面中选择一个用于打开面板的按钮,如本例中选用了第20行位于头部栏左侧的按钮,并将链接指向的地址改为该控件的id,并且不要忘记在id前加入“#”。

根据需要来设置面板的一些高级属性,如是否需要加入动画或者面板处于屏幕的左侧还是右侧等,本例选择了默认属性,即面板在左侧出现。

下面再给出关闭面板的方法。

首先为面板控件添加一组属性data-swipe-close="false",然后在面板中加入一个按钮控件,比如:

        <a href="# mypanel" data-rel="close"  data-role="button">关闭面板 </a>

其中链接指向的地址依然是面板的id,这样就完成对面板进行关闭的操作。当单击该按钮时,面板将会自动被关闭,但是要注意该按钮必须被放置在面板中,因为当面板被激活时,面板外的按钮都是无效的。

提示

虽然可以为面板单独设置一个关闭按钮,但是笔者却认为这在大多数情况下没有必要的,因为只要单击原页面的任何区域,就能够起到关闭面板的作用。

在上一节讲过,单击页面中的空白区域会对工具栏进行隐藏或显示的切换,而在刚刚又讲到,单击原页面的空白处会自动关闭面板,而这显然是冲突的。为此,jQuery Mobile的作者也设定了相应的优先级规则,在面板被打开时,单击原页面的内容将会优先关闭面板,因此,这时单击并不会使状态栏隐藏,同样地,本例中原页面中的按钮在面板被激活时也是无法被单击的。