此刻:常驻三行同周妈妈使用动态(三种工具错开、可点直达),排在悄悄话入口上方 (v26100185)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
39
js/app.js
39
js/app.js
@@ -3,7 +3,7 @@
|
||||
(function () {
|
||||
'use strict';
|
||||
/* 页面版本号(YYMMDD+序号):显示在「关于兜爸心选」页底部;bump 时同步 head 注释与 ?v= */
|
||||
var VER = '26100183';
|
||||
var VER = '26100185';
|
||||
const $ = (s, c) => (c || document).querySelector(s);
|
||||
const $$ = (s, c) => Array.from((c || document).querySelectorAll(s));
|
||||
|
||||
@@ -3812,24 +3812,32 @@
|
||||
return ((_fpData && _fpData.used) || []).some(u => u.appId === SELF_APP[k]);
|
||||
}
|
||||
function rowHTML(f) {
|
||||
/* 一行:小头像 + 「同周妈妈 · 刚刚」+ 动作(数字标色)。原文「孕 29 周的妈妈 数完胎动……」按「的妈妈 」切 */
|
||||
/* 一行:小头像 + 「同周妈妈 · 刚刚」+ 动作(数字标色)。原文「孕 29 周的妈妈 数完胎动……」按「的妈妈 」切。
|
||||
动作能对上首页入口(act ∈ TODAY_GO)→ 整行可点,直接进那个工具 */
|
||||
const t = String(f.text || ''), i = t.indexOf('的妈妈 ');
|
||||
const who = peerMode ? '同孕周妈妈' : (i > 0 ? t.slice(0, i + 3) : '一位妈妈'), what = i > 0 ? t.slice(i + 4) : t;
|
||||
return '<div class="pl-row"><span class="pr-ava">' + momAva(strSeed(t + (f.ago || ''))) + '</span>' +
|
||||
'<span class="pr-who">' + esc(who) + ' · ' + esc(f.ago || '刚刚') + '</span><span class="pr-do">' +
|
||||
esc(what).replace(/(\d+)/g, '<em>$1</em>') + '</span></div>';
|
||||
const go = f.act && TODAY_GO[f.act] ? ' data-go="' + esc(f.act) + '"' : '';
|
||||
return '<div class="pl-row' + (go ? ' is-go' : '') + '"' + go + '><span class="pr-ava">' + momAva(strSeed(t + (f.ago || ''))) + '</span>' +
|
||||
/* 同周版标题已经说了「和你同一周」,行里不再重复「同孕周妈妈」,省出地方给动作。
|
||||
不显示「N 分钟前」:三行按工具错开排(见 paint),时间会前后颠倒,又不能改接口给的时间 */
|
||||
(peerMode ? '' : '<span class="pr-who">' + esc(who) + '</span>') + '<span class="pr-do">' +
|
||||
esc(what).replace(/(\d+)/g, '<em>$1</em>') + '</span>' +
|
||||
(go ? '<i class="pr-go" aria-hidden="true">›</i>' : '') + '</div>';
|
||||
}
|
||||
const FEED_N = 3; /* 常驻三行 */
|
||||
const ROW_H = 30; /* = .pl-feed3 .pl-row 高度 */
|
||||
function tick() {
|
||||
const tr = $('#plTrack');
|
||||
if (!tr || feed.length < 2 || document.hidden) return;
|
||||
if (!tr || feed.length <= FEED_N || document.hidden) return;
|
||||
fi = (fi + 1) % feed.length;
|
||||
tr.insertAdjacentHTML('beforeend', rowHTML(feed[fi]));
|
||||
tr.insertAdjacentHTML('beforeend', rowHTML(feed[(fi + FEED_N - 1) % feed.length]));
|
||||
tr.firstElementChild.classList.add('is-out');
|
||||
tr.classList.add('is-move');
|
||||
tr.style.transform = 'translateY(-26px)'; /* = .pl-row 高度 */
|
||||
tr.style.transform = 'translateY(-' + ROW_H + 'px)';
|
||||
setTimeout(() => {
|
||||
tr.classList.remove('is-move');
|
||||
/* 翻动途中若 paint() 重置过轨道(只剩 1 行),别把仅剩的那行也删了 */
|
||||
if (tr.childElementCount > 1) tr.removeChild(tr.firstElementChild);
|
||||
/* 翻动途中若 paint() 重置过轨道,别把刚铺好的三行删掉 */
|
||||
if (tr.childElementCount > FEED_N) tr.removeChild(tr.firstElementChild);
|
||||
tr.style.transform = '';
|
||||
}, 600);
|
||||
}
|
||||
@@ -3889,12 +3897,19 @@
|
||||
const sig = nf.map(x => x.text).join('|');
|
||||
if (nf.length && fe.dataset.sig !== sig) {
|
||||
fe.dataset.sig = sig;
|
||||
feed = nf;
|
||||
/* 三行尽量是三种不同的工具:按原顺序贪心挑,跟前两条动作不同的优先(挑不到就按原顺序) */
|
||||
const pool = nf.slice(), mix = [];
|
||||
while (pool.length) {
|
||||
const recent = mix.slice(-(FEED_N - 1)).map(x => x.act);
|
||||
const k = pool.findIndex(x => recent.indexOf(x.act) < 0);
|
||||
mix.push(pool.splice(k < 0 ? 0 : k, 1)[0]);
|
||||
}
|
||||
feed = mix;
|
||||
fi = 0;
|
||||
const tr = $('#plTrack');
|
||||
tr.classList.remove('is-move');
|
||||
tr.style.transform = '';
|
||||
tr.innerHTML = rowHTML(feed[0]);
|
||||
tr.innerHTML = feed.slice(0, FEED_N).map(rowHTML).join('');
|
||||
if (!ticking) ticking = setInterval(tick, 3000);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user