Skip to content

Commit 1e3a53a

Browse files
authored
Merge pull request #238 from zhangxinxu/develop
Develop
2 parents 0857410 + 3fa0530 commit 1e3a53a

9 files changed

+118
-31
lines changed

docs/Mobilebone.getCleanUrl.html

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<div class="page out">
1414
<div class="content">
1515
<h2>Mobilebone.getClearUrl(trigger[, url][, params]))</h2>
16-
<p>获得干净完整的Ajax请求地址。基本上,此函数API内部用得多,大家大可不必关心</p>
16+
<p>获得干净完整的Ajax请求地址。对于Ajax请求的页面,返回的这个地址也是页面的ID,可以用来remove页面</p>
1717
<h3>参数</h3>
1818
<ul>
1919
<li><code>trigger</code> DOM元素。一般表示<code>&lt;a&gt;</code>元素。可选参数,和<code>url</code>至少一个存在。。</li>
@@ -24,10 +24,10 @@ <h3>返回值</h3>
2424
<p>字符串。</p>
2525
<h3>使用示例</h3>
2626
<pre>Mobilebone.getCleanUrl(elementOfA);
27-
Mobilebone.getCleanUrl(elementOfA, ”, “a=1&b=2);
28-
Mobilebone.getCleanUrl(null, xxx.html);
29-
Mobilebone.getCleanUrl(null, xxx.html?a=1&b=2);
30-
Mobilebone.getCleanUrl(null, “xxx.html”, “a=1&b=2);</pre>
27+
Mobilebone.getCleanUrl(elementOfA, "a=1&amp;b=2");
28+
Mobilebone.getCleanUrl(null, "xxx.html");
29+
Mobilebone.getCleanUrl(null, "xxx.html?a=1&amp;b=2");
30+
Mobilebone.getCleanUrl(null, “xxx.html", "a=1&amp;b=2");</pre>
3131
</div>
3232
</div>
3333

docs/Mobilebone.remove.html

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,12 @@ <h2>Mobilebone.remove(domOrId)</h2>
1616
<p>(v2.7.0+)清除页面级别的DOM元素,并连带id标识和缓存一起清除。</p>
1717
<h3>参数</h3>
1818
<ul>
19-
<li><code>domOrId</code> 页面对应DOM元素(默认指类名是<code>.page</code>的元素)或需要删除页面id。必须参数。</li>
19+
<li><code>domOrId</code> 必须参数。页面对应DOM元素(默认指类名是<code>.page</code>的元素)或需要删除页面id。
20+
<p>(v2.7.2+)如果是Ajax请求的页面删除,在可以是触发加载<code>&lt;a&gt;</code>的元素,或者是<code>Mobilebone.getCleanUrl()</code>处理Ajax请求地址后的返回值。</p></li>
2021
</ul>
22+
<h3>其它说明</h3>
23+
<p>对于Ajax请求的页面,如果没有专门指定,这些页面的id是使用<code><a href="Mobilebone.getCleanUrl.html">Mobilebone.getCleanUrl(null, 'xxx.php')</a></code>方法的返回值(假设请求地址是<code>'xxx.php'</code>)。</p>
24+
<p>(v2.7.2+)<code><a href="data-reload.html">data-reload</a></code>新增基于指定id自动删除同一类别页面功能,是一种设计更友好的自动删除实现。</p>
2125
<h3>返回值</h3>
2226
<p>-</p>
2327
<h3>使用示例</h3>
@@ -27,7 +31,15 @@ <h3>使用示例</h3>
2731
<span class="comment">// 移除类名为.pageRootReload的所有页面</span>
2832
[].slice.call(document.querySelectorAll('.pageRootReload')).forEach(function (page) {
2933
Mobilebone.remove(page);
30-
});</pre>
34+
});
35+
36+
<span class="comment">// 移除#rootReload下所有&lt;a&gt;元素加载的页面</span>
37+
[].slice.call(document.querySelectorAll('#rootReload a')).forEach(function (ele) {
38+
Mobilebone.remove(ele);
39+
});
40+
41+
<span class="comment">// 移除请求//detail.php?id=1234这个地址生成的页面</span>
42+
Mobilebone.remove("//detail.php?id=1234");</pre>
3143
</div>
3244
</div>
3345

docs/data-history.html

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<!doctype html>
2+
<html>
3+
<head>
4+
<meta charset="utf-8">
5+
<meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no">
6+
<title>Mobilebone.js API文档-data-history</title>
7+
<link rel="stylesheet" href="../src/mobilebone.css">
8+
<link rel="stylesheet" href="docs.css">
9+
</head>
10+
11+
<body>
12+
<aside></aside>
13+
<div class="page out">
14+
<div class="content">
15+
<h2>data-history</h2>
16+
<p>当发生页面过场切换的时候是否生成一条新的记录。</p>
17+
<ol>
18+
<li><strong>a元素</strong>
19+
<p>例如:</p>
20+
<pre>&lt;a href="ajax.html" data-history="false">&lt;/a></pre>
21+
<p>此时,浏览器地址栏中的地址不会发生变化,不会生成新的记录。</p>
22+
</li>
23+
<li><strong>form元素</strong>
24+
<p><code>a</code>元素类似。</p>
25+
</li>
26+
</ol>
27+
</div>
28+
</div>
29+
30+
<script src="../src/mobilebone.js"></script>
31+
<script>
32+
Mobilebone.captureLink = false;
33+
window.navKey = "data-history";
34+
</script>
35+
<script src="nav.js"></script>
36+
<script src="docs.js"></script>
37+
</body>
38+
</html>

docs/data-reload.html

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,17 @@ <h2>data-reload</h2>
2828
//xxx.com/index.php?list=1 列表详情页1
2929
//xxx.com/index.php?list=2 列表详情页2</pre>
3030
<p>等等,防不胜防。</p>
31-
<p>如果想要对这类页面进行删除,释放内存,可以使用<code>Mobilebone.remove()</code>方法。</p>
31+
<p>如果想要对这类页面进行删除,释放内存,可以使用<code><a href="Mobilebone.remove.html">Mobilebone.remove()</a></code>方法。</p>
32+
<p><strong>(v2.7.2+)</strong>Mobilebone使用另外一直方法来识别URL地址是否是同一类别地址,就是设置<code>data-reload</code>为同一个ID值即可!</p>
33+
<p>这个ID的命名没有要求,只要不是<code>'true'</code><code>'false'</code>即可。当触发加载的时候,Mobilebone会自动删除和这个ID一直的页面元素,保证同类型页面的唯一性,例如:</p>
34+
<pre>&lt;ul&gt;
35+
&lt;li&gt;&lt;a href="detail.html?v=1" data-reload="anyUniqueId"&gt;唯一详情页加载测试&lt;/a&gt;&lt;/li&gt;
36+
&lt;li&gt;&lt;a href="detail.html?v=2" data-reload="anyUniqueId"&gt;唯一详情页加载测试&lt;/a&gt;&lt;/li&gt;
37+
&lt;li&gt;&lt;a href="detail.html?v=3" data-reload="anyUniqueId"&gt;唯一详情页加载测试&lt;/a&gt;&lt;/li&gt;
38+
&lt;li&gt;&lt;a href="detail.html?v=4" data-reload="anyUniqueId"&gt;唯一详情页加载测试&lt;/a&gt;&lt;/li&gt;
39+
&lt;/ul&gt;</pre>
40+
<p>当我们点击任意详情页的时候,会自动删除之前已经加载的详情页,保证内容干净不冲突。</p>
41+
<p></p>
3242
<div><strong>(以下v2.7.0移除,不保证完全兼容)</strong></div>
3343
<del datetime="2017-11-19 19:27">
3444
<p>Mobilebone会对Ajax请求的url地址做智能判断,页面上,永远只会有一个同根页面。例如,页面上有两个请求:</p>

docs/docs.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ aside a { display: block; padding: 5px 10px; color: #fff; position: relative; }
1111
.nav-a:hover { background-color: rgba(255,255,255, .1); }
1212
.nav-a[href*=transition], .nav-a[href*=data-title], .nav-a[href*=otherAnonymousAPIs] { margin-top: 20px; }
1313
.nav-a[href*=autoInit], .nav-a[href*=getPage] { text-decoration: line-through; display: none; }
14-
.nav-a[href*=getCleanUrl], .nav-a[href*=getFunction] { opacity: .6; }
14+
.nav-a[href*=getFunction] { opacity: .6; }
1515
.nav-a[href*=reload]:after, .nav-a[href*=remove]:after { position: absolute; content: '更新'; font-size: 12px; transform: scale(0.8); color: pink; }
1616
.nav-a[href*=remove]:after { content: 'NEW'; }
1717
.nav-a > .mask { display: inline; width: 26px; height: 31px; top: 0; right: 8px; left: auto; background-color: transparent; -webkit-transform: scale(.8,.8); -ms-transform: scale(.75,.75); transform: scale(.75,.75); }

docs/nav.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
(function() {
22
var aside = document.querySelector("aside");
33
if (aside == null) return;
4-
4+
55
var key = window.navKey, html = '<nav>', active = '', matchs = false;
6-
7-
["Mobilebone.support", "Mobilebone.VERSION", "Mobilebone.autoInit", "Mobilebone.captureLink", "Mobilebone.captureForm", "Mobilebone.rootTransition", "Mobilebone.mergeCallback", "Mobilebone.classAnimation", "Mobilebone.classPage", "Mobilebone.classMask", "Mobilebone.pushStateEnabled", "Mobilebone.evalScript", "Mobilebone.transition()", "Mobilebone.getCleanUrl()", "Mobilebone.getPage()", "Mobilebone.createPage()", "Mobilebone.remove()", "Mobilebone.getFunction()", "Mobilebone.ajax()", "Mobilebone.submit()", "Mobilebone.isBack()", "Mobilebone.jsonHandle()", "Mobilebone.init()", "Mobilebone.handleTapEvent()", "otherAnonymousAPIs", "data-title", "data-root", "data-form", "data-params", "data-callbackKeys", "data-mask", "data-rel", "data-ajax", "data-reload", "data-ajaxKeys", "data-preventDefault", "data-container", "data-classPage"].forEach(function(innerhtml) {
6+
7+
["Mobilebone.support", "Mobilebone.VERSION", "Mobilebone.autoInit", "Mobilebone.captureLink", "Mobilebone.captureForm", "Mobilebone.rootTransition", "Mobilebone.mergeCallback", "Mobilebone.classAnimation", "Mobilebone.classPage", "Mobilebone.classMask", "Mobilebone.pushStateEnabled", "Mobilebone.evalScript", "Mobilebone.transition()", "Mobilebone.getCleanUrl()", "Mobilebone.getPage()", "Mobilebone.createPage()", "Mobilebone.remove()", "Mobilebone.getFunction()", "Mobilebone.ajax()", "Mobilebone.submit()", "Mobilebone.isBack()", "Mobilebone.jsonHandle()", "Mobilebone.init()", "Mobilebone.handleTapEvent()", "otherAnonymousAPIs", "data-title", "data-history", "data-root", "data-form", "data-params", "data-callbackKeys", "data-mask", "data-rel", "data-ajax", "data-reload", "data-ajaxKeys", "data-preventDefault", "data-container", "data-classPage"].forEach(function(innerhtml) {
88
if (matchs == true) {
99
active = '';
1010
} else if (key && (key == innerhtml || new RegExp(key).test(innerhtml))) {
1111
active = ' active';
1212
matchs = true;
1313
}
14-
html = html + '<a href="'+ innerhtml.replace("()", "") +'.html" class="nav-a'+ active +'" data-mask data-rel="auto">'+ innerhtml +'</a>';
14+
html = html + '<a href="'+ innerhtml.replace("()", "") +'.html" class="nav-a'+ active +'" data-mask data-rel="auto">'+ innerhtml +'</a>';
1515
});
16-
16+
1717
html += '</nav>';
18-
18+
1919
html = '<h2><a href="'+ (matchs? 'index.html': '#indexPage') +'" data-rel="auto">mobilebone.js<span class="version"></span></a></h2>' + html;
20-
20+
2121
aside.innerHTML = html;
2222
})();

src/mobilebone.css

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ body {
1212
margin: 0;
1313
-webkit-user-select: none;
1414
user-select: none;
15-
-ms-touch-action: none;
1615
}
1716

1817
/* construction */

src/mobilebone.js

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
*
4747
* @type string
4848
**/
49-
Mobilebone.VERSION = '2.7.1';
49+
Mobilebone.VERSION = '2.7.2';
5050

5151
/**
5252
* Whether catch attribute of href from element with tag 'a'
@@ -359,6 +359,7 @@
359359

360360
// v2.7.0 change rule -> don't auto delete pages
361361
// -> delete by using Mobilebone.remove();
362+
// v2.7.2 add using data-reload="xxxxId" to auto remove pages
362363
// Reason Two:
363364
// 1. Most websites are so simple that it's not enough to talk about performance;
364365
// 2. We can't judge relation by two page's url
@@ -504,7 +505,9 @@
504505

505506
/**
506507
* Remove page DOM add on v2.7.0
507-
* @param domOrId: dom-object|string page DOM or page id.
508+
* @param domOrId: dom-object|string
509+
* page DOM or <a> DOM
510+
* page id or <a> href value
508511
* @return {[type]} [description]
509512
*/
510513
Mobilebone.remove = function (domOrId) {
@@ -516,6 +519,9 @@
516519
var pageid = domOrId;
517520
if (typeof pageid == 'string') {
518521
elePage = store[pageid];
522+
} else if (elePage.tagName && elePage.tagName.toLowerCase() == 'a') {
523+
pageid = this.getCleanUrl(elePage);
524+
elePage = store[pageid];
519525
}
520526

521527
if (elePage && elePage.parentElement) {
@@ -1206,14 +1212,17 @@
12061212
target.preventDefault = function() {};
12071213
}
12081214
// get target and href
1209-
target = target || event.target || event.touches[0], href = target.href;
1215+
target = target || event.target || event.touches[0];
1216+
var href = target.href;
12101217
if ((!href || /a/i.test(target.tagName) == false) && (target = target.getParentElementByTag("a"))) {
12111218
href = target.href;
12121219
}
12131220
// the page that current touched or actived
12141221
var selfPage = document.querySelector(".in." + Mobilebone.classPage);
12151222

1216-
if (selfPage == null || !target) return;
1223+
if (selfPage == null || !target) {
1224+
return;
1225+
}
12171226

12181227
// optional params for Mobilebone.transition
12191228
var options = {
@@ -1287,8 +1296,10 @@
12871296
if ((external == true || capture == false) && target.getAttribute("data-ajax") != "true") return;
12881297
}
12891298

1299+
var attrHref = target.getAttribute("href");
1300+
12901301
// judge that if it's a ajax request
1291-
if (/^#/.test(target.getAttribute("href")) == true) {
1302+
if (/^#/.test(attrHref) == true) {
12921303
// hash slide
12931304
var idTargetPage = href.split("#")[1], eleTargetPage = idTargetPage && document.getElementById(idTargetPage);
12941305
if (back == false && rel == "auto") {
@@ -1308,7 +1319,8 @@
13081319
var cleanUrl = Mobilebone.getCleanUrl(target);
13091320

13101321
// if has loaded and the value of 'data-reload' is not 'true'
1311-
var attrReload = target.getAttribute("data-reload"), id = target.getAttribute("href");
1322+
var attrReload = target.getAttribute("data-reload");
1323+
13121324

13131325
if ((attrReload == null || attrReload == "false") && store[cleanUrl]) {
13141326
if (back == false && rel == "auto") {
@@ -1325,9 +1337,19 @@
13251337
} else {
13261338
// v2.7.0 move to here
13271339
if (typeof attrReload == "string" && attrReload != "false") {
1328-
// remove page
1329-
Mobilebone.remove(store[cleanUrl]);
1340+
if (attrReload != '' && attrReload != 'true') {
1341+
// v2.7.2 a new method to remove pafe
1342+
// think 'attrReload' as special ID
1343+
// remove all page using this ID
1344+
slice.call(document.querySelectorAll('a[data-reload="'+ attrReload +'"]')).forEach(function (ele) {
1345+
Mobilebone.remove(ele);
1346+
});
1347+
} else {
1348+
// remove page
1349+
Mobilebone.remove(store[cleanUrl]);
1350+
}
13301351
}
1352+
13311353
// as ajax
13321354
Mobilebone.ajax(target);
13331355
}

test/ajax-html/index.html

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@
2323
<li><a href="ajax-without-page.html" data-title="纯a标签元素返回页面" data-reload>点击加载-返回不含page, 自动创建page</a></li>
2424
<li><a href="ajax-without-page.html" data-reload>svg中title测试(目标效果为不显示)</a></li>
2525
</ul>
26-
<ul>
26+
<ul id="rootReload">
2727
<li><a href="root-reload.php?id=1">root-reload.php?id=1加载,缓存</a></li>
2828
<li><a href="root-reload.php?id=2">root-reload.php?id=2加载,缓存</a></li>
2929
<li><a href="root-reload.php?id=3">root-reload.php?id=3加载,缓存</a></li>
30-
<li><a href="javascript:" id="removePageRootReload">手动清除上面3个页面存储</a></li>
30+
<li><button id="removePage">手动清除上面3个页面存储</button> <small>需打开控制台观察</small></li>
3131
</ul>
3232
<ul>
3333
<li><a href="nosuffix">地址就是个简单名词</a></li>
@@ -36,6 +36,12 @@
3636
<li><a href="b.html">连续加载测试-加载b页面</a></li>
3737
<li><a href="b.html?a=1">连续加载测试-加载b页面</a></li>
3838
</ul>
39+
<ul>
40+
<li><a href="ajax-page.html?v=1" data-reload="anyUniqueId">唯一详情页加载测试 <small>data-reload="anyUniqueId"</small></a></li>
41+
<li><a href="ajax-page.html?v=2" data-reload="anyUniqueId">唯一详情页加载测试</a></li>
42+
<li><a href="ajax-page.html?v=3" data-reload="anyUniqueId">唯一详情页加载测试</a></li>
43+
<li><a href="ajax-page.html?v=4" data-reload="anyUniqueId">唯一详情页加载测试</a></li>
44+
</ul>
3945
<ul>
4046
<li><a href="http://www.zhangxinxu.com/sp/char.html" target="_blank">外部地址测试,应该直接跳转</a></li>
4147
</ul>
@@ -48,7 +54,7 @@
4854
<script src="../../src/mobilebone.js"></script>
4955
<!-- 厂子的frozenjs兼容测试 -->
5056
<script src="../base-slide/zepto.js"></script>
51-
<script src="../base-slide/frozen.js"></script>
57+
<!-- <script src="../base-slide/frozen.js"></script> -->
5258
<script>
5359
// store title
5460
document.getElementById("pageHome").setAttribute("data-title", document.title);
@@ -99,11 +105,11 @@
99105

100106
Mobilebone.evalScript = true;
101107

102-
var btnRemovePage = document.getElementById('removePageRootReload');
108+
var btnRemovePage = document.getElementById('removePage');
103109
if (btnRemovePage) {
104110
btnRemovePage.addEventListener('click', function () {
105-
[].slice.call(document.querySelectorAll('.pageRootReload')).forEach(function (page) {
106-
Mobilebone.remove(page);
111+
[].slice.call(document.querySelectorAll('#rootReload a')).forEach(function (ele) {
112+
Mobilebone.remove(ele);
107113
});
108114
});
109115
}

0 commit comments

Comments
 (0)