v26110253 测试类页面记住最后停留的页面(开始/答题第几题/结果):生娃计算器、5 个专题测试、广场测一测
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -367,8 +367,8 @@ mark{background:linear-gradient(transparent 62%,var(--c20) 0);color:inherit;padd
|
||||
</div>
|
||||
<div class="toast" id="toast"></div>
|
||||
|
||||
<script src="meta.js?v=26110252"></script>
|
||||
<script src="tests.js?v=26110252"></script>
|
||||
<script src="meta.js?v=26110253"></script>
|
||||
<script src="tests.js?v=26110253"></script>
|
||||
<script>
|
||||
(function () {
|
||||
'use strict';
|
||||
@@ -413,7 +413,15 @@ mark{background:linear-gradient(transparent 62%,var(--c20) 0);color:inherit;padd
|
||||
var n = 0;
|
||||
es.forEach(function (e) { if (!e.isIntersecting) return; var el = e.target; io.unobserve(el); setTimeout(function () { el.classList.add('in'); }, 60 * n++); });
|
||||
}, { root: sc, threshold: .08 }) : null;
|
||||
/* 11-03 用户:「重新测试后退回首页,再进来还是结果页;应该以最后所在的页面,再进来呈现对应的页面」
|
||||
→ 每个测试记住最后停在哪(开始 / 第几题 / 结果),按 openid + 测试 id 存 mmbox.gcts.pos.v1,再进来回到那里 */
|
||||
var PKEY = 'mmbox.gcts.pos.v1';
|
||||
function pos(v) {
|
||||
if (v) pos.v = v;
|
||||
try { var o = JSON.parse(localStorage.getItem(PKEY) || '{}'); o[UID] = o[UID] || {}; o[UID][t.id] = { v: pos.v, cur: cur, ans: ans }; localStorage.setItem(PKEY, JSON.stringify(o)); } catch (e) {}
|
||||
}
|
||||
function show(name) {
|
||||
pos(name);
|
||||
Object.keys(views).forEach(function (k) { views[k].classList.toggle('on', k === name); });
|
||||
sc.scrollTop = 0;
|
||||
[].forEach.call(views[name].querySelectorAll('.fade'), function (el) { el.classList.remove('in'); if (io) { io.unobserve(el); io.observe(el); } else el.classList.add('in'); });
|
||||
@@ -472,6 +480,7 @@ mark{background:linear-gradient(transparent 62%,var(--c20) 0);color:inherit;padd
|
||||
$('#prevBtn').disabled = cur === 0;
|
||||
if (isQuiz) { var k = $('#qOk'); k.hidden = !ans.length; k.textContent = '答对 ' + okCount(); }
|
||||
if (ans[cur] != null) mark(ans[cur], true);
|
||||
if (pos.v === 'quiz') pos();
|
||||
}
|
||||
function mark(i, replay) {
|
||||
var bs = $('#qOpts').querySelectorAll('.opt');
|
||||
@@ -513,7 +522,7 @@ mark{background:linear-gradient(transparent 62%,var(--c20) 0);color:inherit;padd
|
||||
/* ================= ③ 计分 ================= */
|
||||
function band(v) { var r = R[0]; R.forEach(function (x) { if (x.min != null && v >= x.min) r = x; }); return r; }
|
||||
var res = null;
|
||||
function finish() {
|
||||
function finish(old) { /* old = 上次的记录:回到结果页时按存下的答案重算、不重新落记录 */
|
||||
var qs = t.questions;
|
||||
if (isQuiz) {
|
||||
var ok = okCount(); res = { r: band(ok), v: ok, p: ok / N, score: ok + '/' + N };
|
||||
@@ -531,8 +540,8 @@ mark{background:linear-gradient(transparent 62%,var(--c20) 0);color:inherit;padd
|
||||
var pc = {}, rest = 100; R.forEach(function (r) { pc[r.k] = Math.round(cnt[r.k] / N * 100); rest -= pc[r.k]; }); pc[tied[0].k] += rest;
|
||||
res = { r: tied[0], cnt: cnt, pc: pc, score: '' };
|
||||
}
|
||||
res.ans = ans.slice(); res.at = Date.now();
|
||||
saveRec({ title: res.r.title, score: res.score, at: res.at });
|
||||
res.ans = ans.slice(); res.at = old ? old.at : Date.now();
|
||||
if (!old) saveRec({ title: res.r.title, score: res.score, at: res.at, ans: res.ans });
|
||||
renderResult();
|
||||
}
|
||||
|
||||
@@ -713,7 +722,14 @@ mark{background:linear-gradient(transparent 62%,var(--c20) 0);color:inherit;padd
|
||||
}, { passive: false });
|
||||
document.addEventListener('touchmove', function (e) { if (!sc.contains(e.target) && !$('#mask').contains(e.target) && e.cancelable) e.preventDefault(); }, { passive: false });
|
||||
|
||||
renderStart(); show('start');
|
||||
renderStart();
|
||||
(function () {
|
||||
var p = null, rec = store()[t.id];
|
||||
try { p = ((JSON.parse(localStorage.getItem(PKEY) || '{}'))[UID] || {})[t.id]; } catch (e) {}
|
||||
if (p && p.v === 'quiz' && Array.isArray(p.ans)) { cur = Math.max(0, Math.min(+p.cur || 0, N - 1)); ans = p.ans.slice(0, N); paint(); show('quiz'); return; }
|
||||
if (p && p.v === 'result' && rec && Array.isArray(rec.ans) && rec.ans.length === N) { ans = rec.ans.slice(); finish(rec); return; }
|
||||
show('start'); /* 新进来 / 上次停在开始页 / 旧记录没存答案 */
|
||||
})();
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
|
||||
Reference in New Issue
Block a user