jQuery Mobile学习笔记(六)——jQuery Mobile API

页面部分的介绍基本结束。有了框架之后,我们要考虑的页面中的数据通信和交互。jQuery Mobile(JQM)使用了JavaScript与框架通信以及进行内容管理的API。

1.文档事件

  1. (document).bind('mobileinit',&nbsp;function()&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Initialization&nbsp;code&nbsp;here&nbsp;&nbsp;</span></li><li class="alt"><span>});&nbsp;&nbsp;</span></li></ol></div><pre name="code" class="html" style="display: none;">(document).bind(‘mobileinit’, function() { // Initialization code here });mobileinit事件会在jQueryMobile框架载入内存之后,UI元素被渲染之前触发,可以使用它来改变一些UI全局选项。

    JQM文档事件的执行顺序通常是:mobileinit - ready - load

    放置位置:jQuery.js之后,jQueryMobile.js之前。

    1. <head>  
    2.        <meta charset=“utf-8” />  
    3.        <title>My first jQuery Mobile code</title>  
    4.        <link rel=“stylesheet” href=“http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.css” />  
    5.        <script src=“http://code.jquery.com/jquery-1.6.4.min.js”></script>  
    6.     <script>$(document).bind(<span style=“background-color: rgb(51, 204, 255);”>“mobileinit”</span>, function() {  
    7.        // Our initialization code here  
    8.     });  
    9.     <script>  
    10.     <script src=“http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.js”></script>  
    11.        <!– CUSTOM INITIALIZATION CODE –>  
    12.        <script src=“customcode.js”></script>  
    13.        <meta name=“viewport” content=“width=device-width, initial-scale=1”>  
    14.  </head>  
     <head>
            <meta charset="utf-8" />
            <title>My first jQuery Mobile code</title>
            <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.css" />
            <script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
            <script>$(document).bind(<span style="background-color: rgb(51, 204, 255);">"mobileinit"</span>, function() {
            // Our initialization code here
            });
            <script>
            <script src="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.js"></script>
            <!-- CUSTOM INITIALIZATION CODE -->
            <script src="customcode.js"></script>
            <meta name="viewport" content="width=device-width, initial-scale=1">
      </head>

    2.配置( .mobilejQuery

    .mobile.&lt;widget_name&gt;.prototype用于访问相应的原型。例如.mobile.page.prototype.options可用于定义应用到每个页面实例(data-role=”page”)的默认属性。这些设置全局或部件默认属性的设置要放在mobileinit事件中。

    2.1全局配置

    用户界面配置:

    1. (document).bind("mobileinit",&nbsp;function()&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;We&nbsp;change&nbsp;default&nbsp;values&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$<span class="attribute">.mobile.defaultPageTransition</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"fade"</span><span>;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$<span class="attribute">.mobile.minScrollBack</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">150</span><span>;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$<span class="attribute">.mobile.activeBtnClass</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"active-button"</span><span>;&nbsp;&nbsp;</span></span></li><li class=""><span>});&nbsp;&nbsp;</span></li></ol></div><pre name="code" class="html" style="display: none;">(document).bind(“mobileinit”, function() { // We change default values .mobile.defaultPageTransition=fade; .mobile.minScrollBack = 150; $.mobile.activeBtnClass = “active-button”; });

      minScrollBack默认页面最小滚动值为250像素高。

      activePageClass/activeBtnClass修改当前活动页面或激活按钮的类名。

      命名空间和Ajax功能:

      1. (document).bind("mobileinit",&nbsp;function()&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;We&nbsp;change&nbsp;default&nbsp;values&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$<span class="attribute">.mobile.ns</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"firt"</span><span>;&nbsp;&nbsp;</span></span></li><li class=""><span>});&nbsp;&nbsp;</span></li></ol></div><pre name="code" class="html" style="display: none;">(document).bind(“mobileinit”, function() { // We change default values $.mobile.ns = “firt”; });为了避免框架间的冲突,可以使用ns全局属性来定义一个命名空间。例如上式使用后,页面模板就会变成:

        1. <div data-firt-role=“page”>  
        2.    <div data-firt-role=“header” data-firt-theme=“a”>  
        3.   
        4.    </div>  
        5.    <div data-firt-role=“content”>  
        6.   
        7.    </div>  
        8. </div>  
        <div data-firt-role="page">
           <div data-firt-role="header" data-firt-theme="a">
        
           </div>
           <div data-firt-role="content">
        
           </div>
        </div>

        如果定义了命名空间,则需要手动修改CSS文件(包括结构和主题文件)以便识别。

        $.mobile.ajaxEnabled = false:禁用所有Ajax功能,所有外部页面将通过浏览器使用完整的HTTP请求加载。

        默认情况下,XMLHttpRequest不支持跨域请求,但是可以通过$.mobile.allowCrossDomainPages=true来开启跨域。


        本地化字符串

        使用Ajax加载外部页面时显示的加载消息、外部页面无法加载时的加载错误消息以及一些其他基于组件的消息。

        下面是各个消息的列表及默认值:

        1. // Global strings  
        2. <span class="attribute">.mobile.loadingMessage</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"loading"</span><span>;&nbsp;&nbsp;</span></span></li><li class="alt"><span><script type="math/tex" id="MathJax-Element-7">.mobile.loadingMessage = "loading";  
        3. </script>.mobile.pageLoadErrorMessage = “Error Loading Page”;  
        4.   
        5. // 组件字符串  
        6. <span class="attribute">.mobile.page.prototype.options.backBtnText</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"Back"</span><span>;&nbsp;&nbsp;</span></span></li><li class="alt"><span><script type="math/tex" id="MathJax-Element-8">.mobile.page.prototype.options.backBtnText = "Back";  
        7. </script>.mobile.dialog.prototype.options.closeBtnText = “Close”  
        8. <span class="attribute">.mobile.collapsible.prototype.options.expandCueText</span><span>&nbsp;=&nbsp;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;<span class="attribute-value">"&nbsp;click&nbsp;to&nbsp;expand&nbsp;contents"</span><span>;&nbsp;&nbsp;</span></span></li><li class=""><span><script type="math/tex" id="MathJax-Element-9">.mobile.collapsible.prototype.options.expandCueText =   
        9.  " click to expand contents";  
        10. </script>.mobile.collapsible.prototype.options. collapseCueText = “ click to collapse contents”;  
        11. <span class="attribute">.mobile.listview.prototype.options.filterPlaceholder</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"Filter&nbsp;items..."</span><span>;&nbsp;&nbsp;</span></span></li><li class=""><span><script type="math/tex" id="MathJax-Element-10">.mobile.listview.prototype.options.filterPlaceholder = "Filter items...";  
        12. </script>.mobile.selectmenu.prototype.options.closeText = “Close”;  
        // Global strings
        $.mobile.loadingMessage = "loading";
        $.mobile.pageLoadErrorMessage = "Error Loading Page";
        
        // 组件字符串
        $.mobile.page.prototype.options.backBtnText = "Back";
        $.mobile.dialog.prototype.options.closeBtnText = "Close"
        $.mobile.collapsible.prototype.options.expandCueText = 
         " click to expand contents";
        $.mobile.collapsible.prototype.options. collapseCueText = " click to collapse contents";
        $.mobile.listview.prototype.options.filterPlaceholder = "Filter items...";
        $.mobile.selectmenu.prototype.options.closeText = "Close";
        创建一个类似的中文版本的JQM文本方案:

        1. (document).bind('mobileinit',&nbsp;function()&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;//&nbsp;Global&nbsp;strings&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;$<span class="attribute">.mobile.loadingMessage</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"正在加载"</span><span>;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;$<span class="attribute">.mobile.pageLoadErrorMessage</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"加载页面出错"</span><span>;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;//&nbsp;Widget&nbsp;strings&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;$<span class="attribute">.mobile.page.prototype.options.backBtnText</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"后退"</span><span>;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;$<span class="attribute">.mobile.dialog.prototype.options.closeBtnText</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"关闭"</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;$<span class="attribute">.mobile.collapsible.prototype.options.expandCueText</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"点击展开"</span><span>;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;$.mobile.collapsible.prototype.options.&nbsp;<span class="attribute">collapseCueText</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"&nbsp;点击收起&nbsp;"</span><span>;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;$<span class="attribute">.mobile.listview.prototype.options.filterPlaceholder</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"&nbsp;过滤&nbsp;"</span><span>;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;$<span class="attribute">.mobile.selectmenu.prototype.options.closeText</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"&nbsp;关闭&nbsp;"</span><span>;&nbsp;&nbsp;</span></span></li><li class="alt"><span>});&nbsp;&nbsp;</span></li></ol></div><pre name="code" class="html" style="display: none;">(document).bind(‘mobileinit’, function() { // Global strings .mobile.loadingMessage=; .mobile.pageLoadErrorMessage = “加载页面出错”; // Widget strings .mobile.page.prototype.options.backBtnText=退; .mobile.dialog.prototype.options.closeBtnText = “关闭” .mobile.collapsible.prototype.options.expandCueText=; .mobile.collapsible.prototype.options. collapseCueText = ” 点击收起 “; .mobile.listview.prototype.options.filterPlaceholder=; .mobile.selectmenu.prototype.options.closeText = ” 关闭 “; });


          2.2页面配置

          1. 改变页面默认主题:  
          改变页面默认主题:
          1. (document).bind('mobileinit',&nbsp;function()&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;$<span class="attribute">.mobile.page.prototype.options.addBackBtn</span><span>&nbsp;&nbsp;&nbsp;=&nbsp;</span><span class="attribute-value">true</span><span>;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;$<span class="attribute">.mobile.page.prototype.options.backBtnTheme</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"e"</span><span>;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;$<span class="attribute">.mobile.page.prototype.options.headerTheme</span><span>&nbsp;&nbsp;=&nbsp;</span><span class="attribute-value">"b"</span><span>;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;$<span class="attribute">.mobile.page.prototype.options.footerTheme</span><span>&nbsp;&nbsp;=&nbsp;</span><span class="attribute-value">"d"</span><span>;&nbsp;&nbsp;</span></span></li><li class=""><span>});&nbsp;&nbsp;</span></li></ol></div><pre name="code" class="html" style="display: none;">(document).bind(‘mobileinit’, function() { .mobile.page.prototype.options.addBackBtn=true; .mobile.page.prototype.options.backBtnTheme = “e”; .mobile.page.prototype.options.headerTheme=b; .mobile.page.prototype.options.footerTheme = “d”; });
            2.3部件配置

            JQM中的每个部件widget都有自己的默认配置属性,可以通过部件的prototype属性中的options对象来改变部件的默认配置,接口为$.mobile.<部件名>.prototype.options

            1. (document).bind('mobileinit',&nbsp;function()&nbsp;{&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;在所有listviews中启用过滤&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;$<span class="attribute">.mobile.listview.prototype.filter</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">true</span><span>;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;在所有选择框上启用非原生菜单&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;$<span class="attribute">.mobile.selectmenu.prototype.nativeMenu</span><span>=</span><span class="attribute-value">false</span><span>;&nbsp;&nbsp;</span></span></li><li class="alt"><span>});&nbsp;&nbsp;</span></li></ol></div><pre name="code" class="html" style="display: none;">(document).bind(‘mobileinit’, function() { // 在所有listviews中启用过滤 .mobile.listview.prototype.filter=true;// .mobile.selectmenu.prototype.nativeMenu=false; });
              1. <strong>  
              2. </strong>  
              <strong>
              </strong>
              1. <strong>3.实用工具</strong>  
              <strong>3.实用工具</strong>

              3.1Data-*工具

              1. 取得页面上所有btn集合:  
              取得页面上所有btn集合:
              1. var buttons = ("a[</span><span class="attribute">data-role</span><span>=</span><span class="attribute-value">button</span><span>"]);&nbsp;&nbsp;</span></span></li></ol></div><pre name="code" class="html" style="display: none;">var buttons =(“a[data-role=button”]);
                1. JQM添加了一个名为jqmData的过滤器,并会应用我们指定的命名空间,上面的代码可以更改为:  
                JQM添加了一个名为jqmData的过滤器,并会应用我们指定的命名空间,上面的代码可以更改为:
                1. <pre name=“code” class=“html”>var buttons = ("a:jqmData(</span><span class="attribute">role</span><span>=</span><span class="attribute-value">'button'</span><span>)");&nbsp;&nbsp;</span></span></li></ol></div><pre name="code" class="html" style="display: none;">&lt;pre name="code" class="html"&gt;var buttons =(“a:jqmData(role=’button’)”);同时,在JQM集合对象上应该使用jqmData和jqmRemoveData来代替原来的jQuery函数data和removedata,例如:
                  1. ("a").jqmRemoveData("transition");&nbsp;&nbsp;</span></span></li><li class=""><span>(“#button1”).jqmData(“theme”, “a”);  
                  $("a").jqmRemoveData("transition");
                  $("#button1").jqmData("theme", "a");


                   3.2页面工具 

                  当前页面:

                  1. var currentPageId = .mobile.activePage.id;&nbsp;&nbsp;</span></span></li></ol></div><pre name="code" class="html" style="display: none;">var currentPageId =.mobile.activePage.id;可以通过 .mobile.pageContainer访body .mobile.changePage方法,它允许我们转向另一个页面,就像用户点击了相应的链接一样。

                    加载外部页面:

                    1. .mobile.changePage("external.html");&nbsp;&nbsp;</span></span></li></ol></div><pre name="code" class="html" style="display: none;">.mobile.changePage(“external.html”);转向当前文档中已经存在的内部页面:

                      1. .mobile.changePage( (“#pageId”));  
                      $.mobile.changePage($("#pageId"));


                      更改页面切换效果:

                      1. .mobile.changePage( (“#page2”), {  
                      2.     transition: “slide”,  
                      3.     reverse: true  
                      4. });  
                      $.mobile.changePage($("#page2"), {
                          transition: "slide",
                          reverse: true
                      });
                      示例:通过POST方式发送数据并加载一个外部页面:

                      1. <script>  
                      2. function viewProduct(idProduct) {  
                      3.    $.mobile.changePage(“productdetail.php”, {  
                      4.        method: “post”,  
                      5.        data: {  
                      6.            action: ‘getProduct’,  
                      7.            id: idProduct  
                      8.        },  
                      9.        transition: “fade”  
                      10.    });  
                      11. }  
                      12. </script>  
                      13.   
                      14. <!– … –>  
                      15. <a href=“javascript:viewProduct(5200)” data-role=“button”>Product details</a>  
                      <script>
                      function viewProduct(idProduct) {
                         $.mobile.changePage("productdetail.php", {
                             method: "post",
                             data: {
                                 action: 'getProduct',
                                 id: idProduct
                             },
                             transition: "fade"
                         });
                      }
                      </script>
                      
                      <!-- ... -->
                      <a href="javascript:viewProduct(5200)" data-role="button">Product details</a>

                      3.3平台、路径、UI工具

                      $.mobile对象中用于查询当前平台的工具。

                      getDocumentUrl():返回原始文档的RU

                      $.mobile.path访问路径管理工具。

                      parseUrl(url):返回一个对象,各个属性对应该URL的各个部分

                      makePathAbsolute(relativePath,absolutePate):基于相对路径返回绝对路径

                      makeURLAbsolute(relativeUrl,absoluteUrl):基于相对URL返回绝对URL

                      isSameDomain(Url1,Url2):如果两个URL同域名则返回true

                      isRelativeUrl(Url):如果URL是相对地址则返回true

                      isAbsolute(Url):如果URL是绝对地址则返回true


                      $.mobile.silentScroll(y)可以将页面滚动到任意位置,同时不显示动画,也不触发任何时间。

                      // 显示加载信息,并在2s后将其隐藏

                      1. .mobile.showPageLoadingMsg();&nbsp;&nbsp;</span></span></li><li class=""><span>setTimeout(function()&nbsp;{&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;$.mobile.hidePageLoadingMsg();&nbsp;&nbsp;</span></li><li class=""><span>},&nbsp;2000);&nbsp;&nbsp;</span></li></ol></div><pre name="code" class="html" style="display: none;">.mobile.showPageLoadingMsg(); setTimeout(function() { .mobile.hidePageLoadingMsg();
                        }, 2000);
                        .mobile.fixedToolbars.show()/.hide():显示、隐藏固定工具栏

                        4.自定义过渡

                        添加一个explode过渡类型:

                        1. </span><span class="attribute">.mobile.transitionHandlers.explode</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">explodeTransitionHandler</span><span>;&nbsp;&nbsp;</span></span></li></ol></div><pre name="code" class="html" style="display: none;"><script type="math/tex" id="MathJax-Element-31">.mobile.transitionHandlers.explode = explodeTransitionHandler;  
                        </script>.mobile.transitionHandlers.explode = explodeTransitionHandler;
                        修改默认的过渡,将它赋值为任何其他处理函数

                        1. </span><span class="attribute">.mobile.defaultTransitionHandler</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">explodeTransitionHandler</span><span>;&nbsp;&nbsp;</span></span></li></ol></div><pre name="code" class="html" style="display: none;"><script type="math/tex" id="MathJax-Element-32">.mobile.defaultTransitionHandler = explodeTransitionHandler;  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值