JQuery Mobile 随笔

第1章 初识JQuery Mobile

1.1 安装JQuery mobile 环境

<meta name="viewport" content="width=device-width,initial-scale=1"/>
    <link rel="stylesheet" type="text/css" href="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css">
    <script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
    <script src="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>

1.2 开发第一个JQuery Mobile 页面

  1. 新建一个HTML文件,在<head>中添加3个JQuery Mobile框架文件
  2. 在标签<body>中通过<div>定义移动页面的结构
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" type="text/css" href="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css">
    <script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
    <script src="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
</head>
<body>
<div id="page1" data-role="page">
    <div data-role="header">
        <h1>页标题</h1>
    </div>
    <div data-role="content">
        <p><a href="#" data-rel="dialog">弹出菜单</a></p>
    </div>
    <div data-role="footer">
        <h3>页脚</h3>
    </div>
</div>
</div>
</body>
</html>

效果图如图所示:

第2章 HTML5基础

本章单独编写,这里不做介绍

第3章 设计页面和对话框

3.1 设计页面

3.1.1 定义单页

根据第1章的建立JQuery Mobile 页面的方法,新建HTML文件

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1"/>
    <link rel="stylesheet" type="text/css" href="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css">
    <script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
    <script src="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
</head>
<body>
<div data-role="page">
    <div data-role="header">
        页标题
    </div>
    <div data-role="content">
        页面内容
    </div>
    <div data-role="footer">
        页脚
    </div>
</div>
</body>
</html>

效果图如下:

这里说明下几个重要的参数说明:

参数说明
page页面容器,其内部的mobile元素将继承这个容器上所设置的属性
header页面标题容器,可以包含文字、按钮元素
footer页面页脚容器,可以包含文字、按钮元素
content页面内容容器,主容器,包含页面的大部分内容
controlgroup将几个元素设置成一组,一般是几个同类型的元素
fieldcontain区域包裹容器,用增加编剧和分割线的方法将容器内的元素和容器外的元素分割
navbar功能导航容器,简单说就是工具条
listview列表展示容器
list-divider列表展示容器的表头,用来展示一组列表的吧标题,内部不可包含链接
button按钮
none阻止框架进行渲染,一般用于form元素
3.1.2 定义多页

新建HTML文件,导入JQuery Mobile框架

<link rel="stylesheet" type="text/css" href="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css">
    <script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
    <script src="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>

配置页面视图,确保在不同设备中都是满屏显示
<meta name="viewport" content="width=device-width,initial-scale=1"/>

完成剩余代码

<body>
<div data-role="page" id="home">
    <div data-role="header">
        页标题
    </div>
    <div data-role="content">
        <p><a href="#new1"> JQuery Mobile 1.4.0发布</a></p>
    </div>
    <div data-role="footer">
        <h4>@2015 jm.cn studio</h4>
    </div>
</div>
<div data-role="page" id="new1">
    <div data-role="header">
        页标题
    </div>
    <div data-role="content">
        <h1>这是另一个页面</h1>
    </div>
    <div data-role="footer">
        页脚
    </div>
</div>
</body>

效果图:

点击链接之后跳转到下一个页面

3.1.3 定义外部页


将标注出来的地方改为外部页面,如page2.html,即可实现点击跳转到page2界面上

3.2 设计对话框

3.2.1 定义对话框

新建一个HTML文件,导入框架文件,在跳转链接的添加data-rel="dialog"即可实现弹出对话框页面

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" type="text/css" href="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css">
    <script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
    <script src="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
</head>
<body>
<div id="page1" data-role="page">
    <div data-role="header">
        <h1>弹出菜单练习</h1>
    </div>
    <div data-role="content">
        <p><a href="#page2" data-rel="dialog">弹出菜单</a></p>
    </div>
    <div data-role="footer">
        <h3>@2018 Fisher</h3>
    </div>
</div>
<div id="page2">
    <div data-role="header">
        <h1>页标题</h1>
    </div>
    <div data-role="content">
        <p>这是一个弹出式菜单</p>
    </div>
    <div data-role="footer">
        <p><a href="#" data-role="button" data-rel="back" data-theme="a">关闭</a></p>
    </div>
</div>
</body>
</html>

效果图:

下一步:点击弹出菜单

3.2.2 定义关闭对话框

上图中的关闭按钮在<footer>中添加的,所以关闭按钮在页脚位置,如果将按钮添加在<content>中,效果如下:

具体代码如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" type="text/css" href="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css">
    <script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
    <script src="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
</head>
<body>
<div id="page1" data-role="page">
    <div data-role="header">
        <h1>弹出菜单练习</h1>
    </div>
    <div data-role="content">
        <p><a href="#page2" data-rel="dialog">弹出菜单</a></p>
    </div>
    <div data-role="footer">
        <h3>@2018 Fisher</h3>
    </div>
</div>
<div id="page2">
    <div data-role="header">
        <h1>页标题</h1>
    </div>
    <div data-role="content">
        <p>这是一个弹出式菜单</p>
        <p><a href="#" data-role="button" data-rel="back" data-theme="a">关闭</a></p>
    </div>
    <div data-role="footer">
        <!--<p><a href="#" data-role="button" data-rel="back" data-theme="a">关闭</a></p>-->
    </div>
</div>
</body>
</html>

第4章 页面高级设计

4.1 页面初始化

在JQuery Mobile中,这3种初始化时间是有区别的,具体说明如下。

  • mobileinit:启动JQuery Mobile时触发该事件。
  • $(docunment).ready():HTML页面DOM对象加载完成时触发此事件。
  • pageinit:初始化完成某个视图页面是,触发此事件。

初始化事件的触发顺序如下。
第1步,首先触发mobileinit。
第2步,触发$(docunment).ready()。
第3步,每当第一次打开某个视图页面时,触发pageinit事件。例如,打开第一个视图页面时,会触发其pageinit事件;当跳转到第二个视图页面时,会触发第二个页面的pageinit事件。

mobileinit、$(document).ready()和pageinit只能触发一次

代码如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1"/>
    <link rel="stylesheet" type="text/css" href="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css">
    <script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
    <script src="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
    <script>
        $(document).ready(function () {
            alert("触发ready事件");
            /*$(document).live("mobileinit", function () {
             alert("触发mobileinit事件");
             });//live方法无效,弃用live改为on*/
            $(document).on("mobileinit", function () {
                alert("触发mobileinit事件");
                $(document).delegate("#page1", "pageinit", function () {
                    alert("触发页面1的pageinit事件");
                });
                $(document).delegate("#page1", "pageshow", function () {
                    alert("触发页面1的pageshow事件");
                });
            });
        });
    </script>
</head>
<body>
<div data-role="page" id="page1">
    <div data-role="header">
        <!--<a href="#" class="ui-btn-icon-home ui-btn-icon-left">首页</a>-->
        <h1>测试Html5Apps首页</h1>
        <!--<a href="#" data-role="button" class="ui-btn-icon-search ui-btn-icon-right">新建</a>-->
    </div>
    <div data-role="content">
        <ul data-role="listview" data-inset="true">
            <li><a href="#" onclick="$(document).trigger('mobileinit')">触发mobileinit</a></li>
            <li><a href="#page2">进入第二页</a></li>
        </ul>
    </div>
</div>
<div data-role="page" id="page2">
    <div data-role="header">
        <h1>第二页</h1>
    </div>
    <div data-role="content">
        <a href="#page1" data-role="button">返回第一页</a>
    </div>
</div>
</body>
</html>

效果图如下:

页面初始化弹窗

点击触发mobileinit

弹窗提示

点击跳转到下一页之后返回到第一个页面时提示

4.2 预加载和缓存

4.2.1 页面预加载

实现页面预加载的方法有两种:

  • 在需要链接页面的标签中添加data-prefetch属性,设置属性值为true,或不设置属性值。设置该属性值之后,JQuery Mobile将在加载完成当前页面之后,自动加载该链接元素所指的目标页面,即href属性的值
  • 调用JavaScript代码中的全局方法$.mobile.loadPage()来预加载指定的目标HTML页面,其最终的效果与设置元素的data-prefetch属性一样
4.2.2 页面缓存

实现将页面内容写入文档缓存中有两种方法:

  • 在需要被缓存的视图页标签中添加data-dom-cache属性,设置该属性值为true,或不设置属性值。
  • 通过JavaScript代码设置$.mobile.page.prototype.options.domCache = true;

4.3 使用锚记

  1. 定义锚记的方法:<a name="anchor">命名锚记</a>
  2. 定位到锚记的方法:<a href="anchor">定位到命名锚记</a>
4.3.1 在单页视图中定义锚记
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1"/>
    <link rel="stylesheet" type="text/css" href="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css">
    <script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
    <script src="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
    <script>
        $(function () {
            $('a.scroll').bind('click vclick', function (ev) {
                var target = $($(this).attr('href')).get(0).offsetTop;
                $.mobile.silentScroll(target);
                return false;
            })
        })
    </script>
</head>
<body>
<div data-role="page">
    <div data-role="header">
        <h1>命名锚记</h1>
    </div>
    <div data-role="content">
        <a class="scroll" href="#anchor" data-role="button">跳转到锚记位置</a>
        <div style="height: 1000px;"></div>
        <p><a name="anchor" data-role="button" id="anchor">命名锚记位置</a></p>
    </div>
    <div data-role="footer">

    </div>
</div>
</body>
</html>
4.3.2 在多页视图中定义锚记

后期补充

4.4 传递参数

在单页视图中使用基于HTTP的方式通过POST和GET请求传递参数,而在多页视图中不需要与服务器进行通信,通常使用下列三种方法实现页面间的参数传递。

  • GET方法:在前一个页面生成参数并传入下一个页面,然后在下一个页面中进行GET内容解析。
  • 通过HTML5的Web Storage进行参数传递
  • 设置全局变量,不推荐
4.4.1 以GET方式传递参数
4.4.2 通过HTML5 Web Storage 传递参数
  • 使用sessionStorage存储在浏览器中,浏览器关闭,sessionStorage中内容会消失
  • 使用localStorage存储在本地,类似cookie,除非主动删除,否则不会删除
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <!-- meta使用viewport以确保页面可自由缩放 -->
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- 引入 jQuery Mobile 样式 -->
    <link rel="stylesheet" href="http://apps.bdimg.com/libs/jquerymobile/1.3.0/jquery.mobile-1.3.0.min.css">

    <!-- 引入 jQuery 库 -->
    <script src="http://apps.bdimg.com/libs/jquery/1.8.3/jquery.min.js"></script>

    <!-- 引入 jQuery Mobile 库 -->
    <script src="http://apps.bdimg.com/libs/jquerymobile/1.3.0/jquery.mobile-1.3.0.min.js"></script>
    <script>
        $('#page2').live('pageshow', function (event, ui) {
            alert("传递给第二个页面的参数是:" + sessionStorage.name);
        })
    </script>
</head>
<body>
<div data-role="page" id="page1">
    <div data-role="header">
        <h1>第一页</h1>
    </div>
    <div data-role="content">
        <a href="#page2" onclick="sessionStorage.name=1" data-role="button">下一页1</a>
        <a href="#page2" onclick="sessionStorage.name=2" data-role="button">下一页2</a>
    </div>
    <div data-role="footer">

    </div>
</div>
<div data-role="page" id="page2">
    <div data-role="header">
        <h1>第二页</h1>
    </div>
    <div data-role="content">
        <a href="#page1" data-role="button">返回第一页</a>
    </div>
</div>
</body>
</html>

效果图:

4.6 实战练习

4.6.1 记事本
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <!-- meta使用viewport以确保页面可自由缩放 -->
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- 引入 jQuery Mobile 样式 -->
    <link rel="stylesheet" href="http://apps.bdimg.com/libs/jquerymobile/1.3.0/jquery.mobile-1.3.0.min.css">

    <!-- 引入 jQuery 库 -->
    <script src="http://apps.bdimg.com/libs/jquery/1.8.3/jquery.min.js"></script>

    <!-- 引入 jQuery Mobile 库 -->
    <script src="http://apps.bdimg.com/libs/jquerymobile/1.3.0/jquery.mobile-1.3.0.min.js"></script>

    <script>
        /**格式化字符串,将数字转换成几位数,前面补0
         * @return {string}
         */
        function prefixInteger(num, n) {
            return (new Array(n).join(0) + num).slice(-n);
        }
        function getNowFormatDate() {
            var date = new Date();
            var seperator1 = "-";
            var seperator2 = ":";
            var month = prefixInteger(date.getMonth() + 1, 2);
            var strDate = prefixInteger(date.getDate(), 2);
            var hours = prefixInteger(date.getHours(), 2);
            var minutes = prefixInteger(date.getMinutes(), 2);
            var seconds = prefixInteger(date.getSeconds(), 2);
            var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate
                    + " " + hours + seperator2 + minutes
                    + seperator2 + seconds;
            return currentdate;
        }
        var session_id;
        function getName(id) {
            sessionStorage.name = null;
            sessionStorage.name = $('#content').find('ul').find(id).find('p').text();
        }
        function S4() {
            return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
        }
        function guid() {
            return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
        }
        function addt() {
            //获取文本输入框中的内容
            var text1 = $('#new').find('#note').val();
            if (text1 == "") {
                text1 = "您未输入任何内容";
            }
            //获取到Ul列表
            var ul = document.getElementById("ul");
            //创建元素Li
            var li = document.createElement("li");
            //向li中添加内容
//            li.innerHTML = text1;
            var _id = guid();
            session_id = _id;
            li.setAttribute("id", _id);
            li.setAttribute("onclick", "getName('#" + _id + "')");
            var a = document.createElement("a");
            a.setAttribute("href", "#detail");
            var h1 = document.createElement("h1");
            h1.innerHTML = getNowFormatDate();
            var p = document.createElement("p");
            p.innerHTML = text1;
            //向ul追加元素li
            ul.appendChild(li);
            li.appendChild(a);
            a.appendChild(h1);
            a.appendChild(p);
            $('#ul').listview('refresh');
        }
        jQuery.extend(jQuery.validator.message, {});
    </script>
</head>
<body>
<div data-role="page" id="home" data-title="记事本">
    <div data-role="header">
        <h1>记事本</h1>
        <a href="#new" data-icon="custom">新建</a>
    </div>
    <div data-role="content" id="content">
        <ul data-role="listview" id="ul">
            <!--<li id="list_item_1" onclick="getName('#list_item_1')">
                <a href="#detail">
                    <h1>2018/04/18</h1>
                    <p>如果我们能活着出去,万水千山你愿意陪我一起看么</p>
                </a>
            </li>
            <li id="list_item_2" onclick="getName('#list_item_2')">
                <a href="#detail">
                    <h1>2018/04/18</h1>
                    <p>前世叫你妖仙姐姐,今世叫你小白痴</p>
                </a>
            </li>-->
        </ul>
        <script>

        </script>
    </div>
    <div data-role="footer" data-position="fixed">
        <div data-role="navbar">
            <ul>
                <li><a href="http://www.w3school.com.cn/jquery/index.asp">Copyright @JQuery Mobile</a></li>
            </ul>
        </div>

    </div>
</div>
<div data-role="page" id="new" data-title="新建笔记本">
    <div data-role="header">
        <h1>新建笔记本</h1>
        <a href="#home" data-icon="back">返回</a>
    </div>
    <div data-role="content">
        <form>
            <label for="note">请输入内容</label>
            <textarea id="note" name="note" style="height: 100%;min-height: 200px;"></textarea>
        </form>
    </div>
    <div data-role="footer" data-position="fixed">
        <div data-role="navbar">
            <ul>
                <li id="save"><a href="#home" onclick="addt()" data-icon="arrow-u">保存</a></li>
            </ul>
        </div>

    </div>
    <script>
        $('#new').live('pageshow', function () {
            $('#note').val(null);
        })
    </script>
</div>
<div data-role="page" id="detail">
    <div data-role="header">
        <h1>详细内容</h1>
        <a href="#home" data-icon="back">返回</a>
    </div>
    <div data-role="content">
        <p id="p"></p>
        <script>
            $('#detail').live('pageshow', function () {
                document.getElementById("p").innerHTML = sessionStorage.name;
            })
        </script>
    </div>
</div>
<!--<div id="error">
    <div data-role="header">
        <h1>页标题</h1>
    </div>
    <div data-role="content">
        <p>您没有输入任何内容哦...</p>
        <p><a href="#" data-role="button" data-rel="back" data-theme="a">关闭</a></p>
    </div>
</div>-->
</body>
</html>

效果图:

点击新建:

输入内容后:

点击保存:

点击其中一条:

第5章 设计弹出页面

5.1 定义弹出页面

弹出页面包括弹出对话框,弹出菜单或嵌套菜单,弹出表单、图片、视频、弹出覆盖面板、地图等不同的形式。几乎所有能够用来“弹出”的页面元素,都可以通过一定的方式应用到弹出页面上。

弹出页面包括两个部分:弹出按钮和弹出页面,具体实现步骤如下:

1.定义弹出按钮。弹出按钮通常基于一个超链接实现,在超链接中,设置属性data_rel为“popup”,表示以弹出页面方式打开所指向的内容。

<a href="#popupTooltip" data-rel="popup" data-role="button" data-inline="true">提示框</a>

2.定义弹出框。弹出页面部分通常是一个div的DOM容器,为这个容器标签(一般为<div>)声明data-role属性,设置值为popup,表示以弹出方式呈现其中的内容。

<div data-role="popup" id="popupTooltip"></div>

示例

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <!-- meta使用viewport以确保页面可自由缩放 -->
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- 引入 jQuery Mobile 样式 -->
    <link rel="stylesheet" href="http://apps.bdimg.com/libs/jquerymobile/1.3.0/jquery.mobile-1.3.0.min.css">

    <!-- 引入 jQuery 库 -->
    <script src="http://apps.bdimg.com/libs/jquery/1.8.3/jquery.min.js"></script>

    <!-- 引入 jQuery Mobile 库 -->
    <script src="http://apps.bdimg.com/libs/jquerymobile/1.3.0/jquery.mobile-1.3.0.min.js"></script>
</head>
<body>
<div data-role="page">
    <div data-role="header">
        <h1>定义弹出页</h1>
    </div>
    <div data-role="content">
        <a class="ui-btn ui-corner-all ui-shadow ui-btn-inline" href="#popupBasic" data-transition="pop"
           data-rel="popup">打开弹出页</a>
        <div id="popupBasic" data-role="popup">
            <p>这是一个简单的弹出框,没有任何设置</p>
        </div>
    </div>

    <div data-role="footer">

    </div>
</div>

</body>
</html>

效果图:

5.2 使用弹出页面

5.2.1 菜单和嵌套菜单
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <!-- meta使用viewport以确保页面可自由缩放 -->
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- 引入 jQuery Mobile 样式 -->
    <link rel="stylesheet" href="http://apps.bdimg.com/libs/jquerymobile/1.3.0/jquery.mobile-1.3.0.min.css">

    <!-- 引入 jQuery 库 -->
    <script src="http://apps.bdimg.com/libs/jquery/1.8.3/jquery.min.js"></script>

    <!-- 引入 jQuery Mobile 库 -->
    <script src="http://apps.bdimg.com/libs/jquerymobile/1.3.0/jquery.mobile-1.3.0.min.js"></script>
</head>
<body>
<div data-role="page">
    <div data-role="header">
        <h1>定义弹出菜单</h1>
    </div>
    <div data-role="content">
        <a class="ui-btn ui-corner-all ui-shadow ui-btn-inline ui-icon-gear ui-btn-icon-left ui-btn-a" href="#popupMenu"
           data-transition="slideup" data-rel="popup">弹出菜单</a>
        <div id="popupMenu" data-role="popup" data-theme="b">
            <ul style="min-width: 210px;" data-role="listview" data-inset="true">
                <li data-role="liost-divider">选择命令</li>
                <li><a href="#">查看代码</a></li>
                <li><a href="#">编辑</a></li>
                <li><a href="#">禁用</a></li>
                <li><a href="#">删除</a></li>
            </ul>
        </div>
    </div>
    <div data-role="footer">

    </div>
</div>
</body>
</html>

效果图:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值