UNPKG

mobilebone

Version:

Bone main for mobile web APP with a sigle page mode by using HTML5 history API router.

144 lines (138 loc) 6.71 kB
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no"> <title>屁屁踢在线幻灯片插件演示</title> <link rel="stylesheet" href="../../src/mobilebone.css"> <link rel="stylesheet" href="ppt.css"> <style> @-webkit-keyframes fadein { from { opacity: 0; } to { opacity: 1; } } @keyframes fadein { from { opacity: 0; } to { opacity: 1; } } @-webkit-keyframes fadeout { from { opacity: 1; } to { opacity: 0; } } @keyframes fadeout { from { opacity: 1; } to { opacity: 0; } } .fade.out { opacity: 0; -webkit-animation-duration: 125ms; -webkit-animation-name: fadeout; animation-duration: 125ms; animation-name: fadeout; } .fade.in { opacity: 1; -webkit-animation-duration: 225ms; -webkit-animation-name: fadein; animation-duration: 225ms; animation-name: fadein; } </style> </head> <body> <div class="page out"> <div class="content section-header"> <h1>mobilebone.js</h1> <h2>mobile移动web APP单页切换骨架</h2> </div> </div> <div class="page out"> <div class="content only-header"> <h1>为何需要?</h1> <ol> <li class="fade out">Phonegap等类似跨移动开发平台,其静态页面都是index.html, 单页面,因此,需要跟原生一样的过场体验。</li> <li class="fade out">Hybird app开发,原生APP内嵌web APP, 为了两者体验一致,不至于交互太唐突,也需要无刷新过场效果。</li> <li class="fade out">就算是纯粹的移动web APP, 使用无刷新模式也不失为一种不错的选型策略。</li> </ol> </div> </div> <div class="page out"> <div class="content only-header"> <h1>如何使用?</h1> <pre class="fade out">&lt;link rel="stylesheet" href="mobilebone.css"></pre> <pre class="fade out">&lt;script src="mobilebone.js">&lt;/script></pre> <pre class="fade out">body page page page</pre> </div> </div> <div class="page out"> <div class="content only-header"> <h1>优势?</h1> <p>mobilebone.js只做了一件事情,切换。所以,JS文件很小,gzip后3~4K, 而且很灵活,几乎没有任何UI的限制,适用于各个项目各个场景。</p> </div> </div> <div class="page out"> <div class="content only-header"> <h1>mobilebone.js深入</h1> <h4>基本触发机制</h4> <p>与jQuery Mobile类似的机制,引入mobilebone.js, 即对页面所有a标签做了委托。根据<code>href</code>值做智能判断直接过场,Ajax请求过场,还是无作为(javascript:*或外链)。<code>data-ajax="false"</code>会还原链接为传统跳转。</p> <p>默认是<code>click</code>绑定,但如果你引用类似Zepto的<code>touch</code>模块,则mobilebone走<code>touch</code>事件。</p> <p><code>Mobilebone.captureLink = false</code>全局设置,会让页面所有链接普通化,除非有<code>data-ajax=true</code>.</p> <p>对页面所有<code>form</code><code>submit</code>也做了委托,默认所有的表单都是<code>ajax</code>提交,并根据返回内容实现过场效果。规则与<code>a</code>元素<code>ajax</code>提交类似。</p> </div> </div> <div class="page out"> <div class="content only-header"> <h1>mobilebone.js深入</h1> <h4>过场原理</h4> <p>与jQuery Mobile一样的机制,in/out/reverse类名切换触发:</p> <pre class="f20">"page slide in" / "page slide out" → "page slide out" / "page slide in"</pre> <p class="fade out">其中<code>slide</code>是动画的类型,默认值。你可以自定义,或者使用<code>animate.css</code>(jQuery Mobile中CSS分离), 含更多过场效果。</p> <div class="fade out"> <h4>路由管理机制</h4> <p>使用HTML5 <code>history</code> API. 使用url <code>hash</code>记录, 格式同样借鉴J&amp;M, <code>#&amp;</code>, 后面跟随每个页面对应的标志量(页面id或ajax地址)。</p> <p>每当页面刷新、前进或后退(<code>popstate</code>), Mobilebone会根据<code>hash</code>对应标志量直接显示或重新请求对应页面。</p> </div> </div> </div> <div class="page out"> <div class="content only-header"> <h1>mobilebone.js深入</h1> <h4>页面缓存机制</h4> <p>默认即存在的page默认都缓存;ajax请求页面默认缓存,<code>data-reload="true"</code>时候请求页面不会缓存。</p> <div class="fade out"> <h4>页面事件管理</h4> <p>可全局或单独页面设置各类回调事件,目前有:<code>callback</code>, <code>fallback</code>, <code>onpagefirstinto</code>, <code>animationstart</code>, <code>animationend</code>, <code>preventdefault</code>.</p> <p>全局定义如:Mobilebone.callback = function() {};</p> <p>局部定义<code>data-callback="function_key"</code>. 可以使用<code>data-root</code>指定暴露的全局对象,例如:<code>data-root="$"</code></p> <p><code>Mobilebone.mergeCallback</code>可以控制全局和局部回调是覆盖还是合并(默认)。</p> </div> </div> </div> <div class="page out"> <div class="content only-header"> <h1>mobilebone.js深入</h1> <h4 class="mb-3">Ajax参数以及事件管理</h4> <p>与jQuery, Zepto <code>$.ajax()</code>一致,例如<code>data-success</code>, <code>data-error</code>, <code>data-timeout</code>等,也可以使用<code>data-params</code>以查询字符串形式设置多个参数。</p> <p class="fade out"><code>form</code>表单也是如此。</p> <p class="fade out">如果<code>datatype</code><code>"json"</code>,Mobilebone会拿<code>Mobilebone.jsonHandle(response)</code>的返回值作为新页面载入。如果是默认字符串类型,则直接载入<code>response</code>(有处理,获取<code>title</code>, <code>page</code>元素等).</p> <div class="fade out"> <h4 class="mb-3">其他细节</h4> <p><code>title</code>管理机制,方向管理机制<code>data-rel="abck/auto"</code>,菊花可定制(整页或某元素内),或者模块化加载等。</p> <pre class="mt-3">var Mobilebone = require('mobilebone'); Mobilebone.init();</pre> </div> </div> </div> <div class="page out"> <div class="content section-header"> <h1>Q&amp;A</h1> <h2>by zhangxinxu 2014-10</h2> </div> </div> <script src="../../src/mobilebone.js"></script> <script src="mobilebone.ppt.js"></script> </body> </html>