Repository navigation
Releases: Noyllopa/pulse
Release list
pulse 1.0.6-alpha.1
pulse 1.0.6-alpha.1
Added
- 悬浮导航"消息"那颗现在带上未读数字,红底白字压在信封右上角,和站点自己那颗角标同一个
长相。之前我们把顶栏整颗消息入口收掉了,未读数字跟着一起看不见。数字只从站点那里搬过来、
不自己算,所以读完自然清零。代价:站点只在首页摆这颗角标,人在"消息 / 我的 / 搜索"这几页时
它保持上一次看到的数,回到首页才重新对齐。
Changed
- 表情面板底部的翻页指示圆点,当前页那颗从橙色改成主题蓝,与整站"当前项"的配色一致;
其余几颗仍是淡淡的灰。手机与平板、深浅两档一样。
Fixed
- 表情面板往右拉(翻回上一页)不再"顿一下再窜过去"。之前只允许右拉用较小的行程翻页、
左拉要拉得更狠才算,同一把力气两个方向结果不一样;而被这样接住的那一把其实还剩大半页
要走,收尾却照旧固定 200 毫秒,内容一下比手指快出十倍。现在两个方向用同一档判定,
收尾时长跟着手速走:慢拉接得稳,快甩仍是 200 毫秒。代价有两头:往左拉现在小行程也算翻页;
翻页收尾那一下站点本来就不让点表情(怕点中正在移动的格子),这一段从固定 200 毫秒变成
最长 460 毫秒(手机上那一档约 290 毫秒)。 - 拖动中途手指被系统收走时(比如起手太贴屏幕左缘、撞上了返回手势),面板不再僵住约
四分之一秒才回位,当场就收尾;半露出来的那一页跟着滑走,不再当场消失。 - 深色档下表情面板底部那一排分类图标,选中项不再是一块白底。站点给选中项的底色是实心
近白(这只在浅色档成立),深色下压在深卡面上就是一块白斑;换分类时旧选中项淡出、
新选中项淡入,中途两块白同时出现——那就是"翻到下一类闪一下白"。现在换成浅色半透明,
换类时只是两枚淡淡地交接,全程不泛白。浅色档保持原样。 - 消息页(@我的 / 评论 / 赞)右侧那格微博缩略图不再被深色模式整张反色。深色底的截图
以前会被翻成一块白压在黑卡上。这类内容图现在保持原样,和首页大图的行为一致。
代价是白底文档截图也保持白底,不会再被翻成黑底。 - 深色档下表情面板里个别表情的颜色不再被改坏(几个黄色脸会掉一半蓝,变成发暗的芥末黄,
同一屏里另一些却正常)。这是系统深色适配按绘制区域重新调色,给面板单独声明
"这块的深色由我们自己管",它就不再来动这些图。连带补上分类栏与翻页圆点的底色——
这两处原先正是靠系统适配压暗的,接管之后得自己填。 - 深色档下按住表情时那一格的选中底不再是一块亮灰。站点给的选中底色是近白实心,
在浅色档它是"比白卡暗一点",搬到黑卡上就成了亮灰;现在换成与分类栏选中项同一档的半透明白,
按住的反馈还在,但不刺眼。浅色档保持原样。 - 表情面板里左右翻页不再被下拉刷新抢走手势。拇指横扫难免带一点向下的分量,实测只要
6dp 就够让外层下拉刷新把整串事件截走:页面收到"手势取消",站点那一把的收尾不来了,
已经拉出去的半页白拉一次,看着就是"这一下没反应"——之前"连续快速翻回上一页偶尔翻不动"
报的那件事,根子在这里。现在起手落在面板里的那一把归面板,面板之外照常可以下拉刷新
(手机与平板、深浅两档各自验过:面板里竖着拽不触发刷新,正文区照旧触发)。 - 热搜条目页点进一条微博、再按返回,列表有概率上下乱跳:这一趟站点把整列从空文档重建,
浏览器的"恢复滚动"落在文档还短的时候,之后几百毫秒里内容一批批长回来,位置就被反复挪
(实测同一张卡 64 → 180 → -1118,累计 1414px;另有四档分别偏 531/532/664/1063px)。
现在改成按内容复位:离开列表页时记住"正中间那张卡是谁、它贴在视口哪里",回来后在
重建这段时间里不断把那张卡搬回原位,等位置和文档高都稳住了才收手。
实测同一套四轮里三轮回到原位(偏差 0),一轮没回到(那轮站点重建得慢,锚点那张卡迟迟没挂上)。
代价:返回后的头两到三秒里,页面会自己小幅校正滚动;这期间你一旦动手滑,立刻让位给你。
只管搜索/热搜条目这一页,首页那条流仍走它自己原有的记账。 - 另外补一道兜底:万一某一把的收尾事件整个没送达(连"取消"都没有),页面会停在半路,
下一把从半路开始跟手,看着也是没翻。现在单指重新按下的那一刻先把上一把结算掉——
够行程的补成翻页,不够的回弹;还有手指按着时不去碰别人正在做的那一把。 - 未登录时点悬浮导航的"我的",现在会进登录页。以前只是弹一句"请先登录微博",
有时连这一句都没有。登录页上按返回仍然退回信息流接着逛,这条没变。 - 微博正文页看完评论里的图、按返回之后正文回到顶部,这一趟现在会把位置搬回去:点开图之前
先记住读到哪,关掉之后整页要是被甩回了顶部,就回到记下的那一处。另外查到一件确实会发生的
"按了没反应":站点在看图开启动画跑完之前会不理关闭那一按,而系统那一下已经算被用掉了,
没有谁会再按第二次。现在按完自己盯一会儿,没关掉就补按——点图后隔 60 毫秒、150 毫秒按返回,
这两个间隔现在都在 400 毫秒内关掉,位置不动。 - 评论区的配图补上圆角,与首页、正文大图同一档。之前全站那几条圆角规则都没管到它,
方角的小图直接压在圆角的评论卡上。 - 深色档的登录页,底下那两颗入口图标不再扎眼:扫码那颗原先是深灰一坨、几乎看不出图形,
微信那颗外圈有一圈亮边。是我们替小图挡深色适配的那层处理多管了闲事——这两颗本来就该
交给系统去适配。现在扫码是白色图标,微信那一圈降到中性灰、与扫码同一档。浅色档不变。
安装前先看 README 的「已知限制」与「下载」。
pulse 1.0.5-alpha.1
pulse 1.0.5-alpha.1
Fixed
-
点开视频、放大图片时,状态栏那条跟着变成黑色,时间电量那些图标同时转成白色;关掉就回到
页面原来的底色。之前那两层是整屏黑,而状态栏那条一直是页面底色,黑屏上面压着一条浅灰
(浅色档最明显),底部那条同理。卡片"..."那种白底菜单不算,不会把状态栏带黑。 -
正文页点开评论后那只输入框不再是纯色一块。它本来就坐在悬浮的玻璃胶囊里,自己再填一层底色
就成了"玻璃上贴了张纸";现在整只胶囊是一种材质,深浅两档、手机与平板一起改。
代价:输入区不再有自己的边界,展开态里只剩"发送"那颗还是实底。 -
平板上点开评论之后再点右侧的"转发""赞"有反应了。评论框展开时站点会把底部那一排控件收走,
这两颗代理按钮找不到可点的东西,按下去没动静;现在会先让站点把那一排放回来,再点它。
"评论"那颗也跟着理顺:框已经开着时再点它是把光标放回输入框,不会把已经打的字清掉。 -
首页的动图点开大图后不再顶着一条视频进度条。动图在站点那边其实是一小段循环片子,
跟 live 图同类,之前只有 live 图被认出来、动图漏了,于是给它配了播放键、时间、进度条和倍速,
看着像个坏掉的播放器。现在它跟 live 图一样只留画面与右上角的关闭。真视频照旧有这一条。
安装前先看 README 的「已知限制」与「下载」。
pulse 1.0.4-alpha.1
pulse 1.0.4-alpha.1
Added
-
视频播放器的控制条上加了一颗倍速,就在"高清 / 标清"那颗的左边:点开是 0.5x / 0.75x / 1x /
1.25x / 1.5x / 2x 六档,选完当场生效。没调过的时候那颗写"倍速",调过之后写当前档位;字号、
字族与画质那颗同一份,格宽也照条上其它控件那一档(48),三段间距读起来是匀的。
点开播放与全屏播放两处都有(同一根控制条)。这一档记在会话里:换画质不丢,之后点开别的视频
也沿用。与原来"按住画面走 2x、松手还原"那套不冲突 —— 长按是临时的,松手还回到你选的这一档
(实测 1.5x 下长按变 2x、松手回 1.5x)。当前那一档的字色用主题蓝,与画质那颗一致。
代价:控制条右侧多占一格(48 宽)。 -
画质菜单里现在看得出当前是哪一档:站点只给它自己点中的那一项上色,换过一次档之后它会把
那几项重建一遍、选中态就丢了,实测在播标清时"高清 / 标清 / 流畅"三项全是白字。
现在按那颗显示的当前档把对应一项标回来,字色与倍速那颗同为主题蓝(站点原来是橙)。 -
平板首页在"编辑"那颗的正上方加了一颗圆形刷新按钮,与它同尺寸、右沿对齐。点一下走的是微博
自己那颗刷新键:回到顶部并重新取一屏。没有自己滚回去 —— 信息流分段加载,滚回顶会把还没
补插回来的条目甩在身后,顶部剩一条空白。
外观照左侧悬浮导航栏:玻璃底、1px 描边、图标用同一档字色,深浅两档跟着一起换。
手机端不加这颗,那边的编辑球本来就压在底部导航上方,再叠一颗会撞。
代价:右下角竖向多占一格(56 高 + 16 间距)。 -
双击"首页"触发刷新时,那颗按钮上多了一段交接动画:图标缩小消失 → 一圈进度条从 12 点画满 →
进度条淡出 → 图标放大回来,整段 720ms。原来第二下点完只是顶部那一屏卡片被无声换掉,
看着像"点了一下没反应,然后页面自己跳了"。进度条吃当前项那支蓝(选中态与深色档自动跟着走),
留 18% 的轨道底,所以它读作"在走进度"而不是"转圈等待"。
系统开了"减弱动态效果"时不缩放、不画环,只留一次短促的明暗。
回顶那一支(还没滑到顶部时的第一下)不演:滚动本身就是反馈。
代价:整段是固定时长,不跟着真实加载走 —— 刷新比 720ms 快时,图标会先回到位、内容才换;
四拍分开后,环退场与图标回位之间约有 36ms 两者都很淡的交接缝。
Changed
-
私信会话页重排(手机与平板),重点是那条输入框。原来它是通栏贴底的一块直角板,展开打字时
上面是一块纯色输入区、下面是玻璃态的按钮行,两种材质挤在同一个框里。现在整条做成悬浮的玻璃
胶囊,与底部导航、正文页评论框同一份材质;输入区不再单独填色,打字时是一整面。胶囊贴着键盘
上沿,键盘收起跟着回落。
气泡两面归到全站配色:对方的是卡面加 1px 描边,自己发出去的是品牌蓝。站点画在气泡角上的那枚
小尾巴去掉了——它的颜色跟的是站点原来那支亮蓝,泡一换色就对不上。发送键换成与发博球同一档的
渐变胶囊,禁用时是灰底灰字,不再靠整颗半透明。
深色下另修一处:对方气泡的底站点给的是白,被算法加深打到与页面底只差一档,整条看不见"泡"、
只剩文字。
平板上会话列与输入胶囊一起收到 880 宽居中(原来铺满 1080 条带,而气泡自身只有 244 宽,
左右两坨中间空着一大片)。
代价:会话列上下各让出一条(顶部让返回球、底部让输入胶囊),单屏能看到的消息比原来少约一条;
手机端输入条不再贴住屏幕两边。 -
平板上的博主主页(
/p/100505<uid>,以及同架构的/u/<uid>)改成桌面式两栏:左栏一张
常驻资料卡(滑到底也不跟着内容走),卡内自上而下是封面 + 头像 + 昵称 / 关注粉丝 / 认证,
再下是把原底栏"关注(已关注)/ 私信 / 全部微博"三颗搬进来做成的等分胶囊按钮
("全部微博"取自"的热门"弹出菜单里的那一项),最下面是竖排的
"精选 / 微博 / 视频 / 相册"切换栏;右栏是博主微博流。
站点原本把信息全压在封面居中的一条上,切换栏和底栏又是写死的 750px,
跟其它内容页对不齐,现在一起收进同一条带。按钮整颗搬、不复制内容、不改事件,
点击与菜单仍由站点自己接;窄屏(<768px)还原成手机版式。
代价:左栏固定 340 宽,竖排切换栏比横排多占约 145 高。 -
这一页的控件改成按下就有反应(原来要等松手),手机和平板都有:三颗胶囊按钮按下当场缩一点、
换到全站那个"按下底色",松手回弹;切换栏整行、底栏三颗按下给一条浅底;选中项那根蓝色竖条
从文字那一侧长出来;"已关注"的弹层改成从按钮上方淡入上浮、收起原路回去,而不是闪一下。
系统开了"减弱动态效果"时这些全部关掉(按下仍可点、提示不变,只是不动)。 -
正文页评论里内联显示的那几楼(楼中楼)改成整块填底色并切了圆角:浅色 #F9F9F9、深色 #131313,
与转发引用块同一档,四角 10px;块上沿那条发丝线跟着去掉,不两种分隔叠着。点楼中楼进去的那一整个页面
不变。这一档与卡面只差 6 档,1.0.3-alpha.2曾因此改成画线,这次按要求回到填色。 -
平板滑动更跟手:滚动期主线程长任务从 32 次 / 2.7s 降到 18 次 / 1.6s(p99 帧时 167→100ms)。
三处都只是"少做无用功":① 收"打开 APP"引导弹层那一趟原先挂在每个滚动事件上,要遍历
全文档 800+ 个 div 逐个getComputedStyle(CPU profiler 实测占滚动期主线程 9.4%,
是排布之外的第一热点);现在限流到 250ms 一次,并把"文案判据"挪到样式判据之前,降到 1~2%。
②overlayOpen()在一次refresh()里原先算两遍,改成算一次。
③ 窄屏下"把排布交还站点"原先每个滚动事件都重来一遍(全文档查询 + 逐卡offsetHeight
强制布局 + 重写站点账本里的.hei),改成只在确实接管过的那一次做。
Fixed
-
平板博主主页那张卡的几处不对:两栏顶边差一截(右栏首张卡还贴着屏幕上沿)、
"已关注"被劈成图标与文字两行、"私信"和"全部微博"没有图标、封面被横向拉长、
切换栏横排在 340 宽的左栏里太挤。封面改成只在卡的上沿那一条里裁切,不再整张压扁。 -
没关注过的博主在平板上看不到"关注"按钮:搬按钮时只认"已关注"这个文案,
未关注那一颗被落在了已经收掉的底栏里。 -
左栏那张卡其实并不常驻:一条给顶栏让位的固定高度正好套在了网格容器上,
能粘的范围被压回一小格;另外翻过一页之后站点会把切换栏钉成悬浮条,
竖排之后就甩到屏幕左缘压住返回球。 -
平板上反复进出博主主页,左栏会自己套自己(实测叠到 310 层),
每层都要重排一遍,越用越卡。 -
浅色档下博主主页的昵称、关注粉丝、认证三行看不见:站点把那些字写死成白色,
因为在手机上它们是压在暗化过的封面上的。 -
"已关注"的弹出菜单(设置分组 / 取消关注)点了没反应:胶囊按钮把超出自己范围的部分裁掉了。
-
转屏或分屏之后博主主页不还原成手机版式:三颗按钮会卡在卡片里,底下那条操作栏空着。
-
博主主页的头像比昵称低一截:站点给头像那一格留了 44px 上内边距(手机档用它把头像从状态栏
下面顶出来),搬进大屏那一行后整颗被压低;头像外圈那层 40% 白的圆环同理,落在卡面上只剩
一圈脏边。 -
分类不足四项时,切换栏那张卡下面多出一块读不通的空档:站点在卡内那一层留了 20px 下内边距
(横排时给吸顶用的)。收掉之后卡片高度跟着项数走,三项、五项都刚好包住内容。 -
博主主页里每条微博底下的转评赞与首页微博卡片不是一套:这条是老版式(三格等分铺满整宽、
条目之间夹竖线、上下不留白),首页那条是靠左排、留白更足、无分隔;连图标都是另一套字体。
现在排布、留白、图标字形、图标与文字的纵向对齐都统一成首页那条;顺带去掉了它上面那条
在深色档会被渲染成实心亮线的透明边框。 -
手机端的博主主页(位置不变,只改样式):底栏三颗按钮各自顶到了格子的左缘、彼此对不齐
(一条给讨论栏写的规则漏到了这里);栏顶那条线在深色档是一条刺眼的亮线;
"私信"没有图标。切换栏的圆角也统一成同页卡片的圆角。 -
手机端博主主页那一族剩下的几处:切换栏和底栏下面各空着 20px(站点为横排吸顶留的内边距);
切换栏翻过一页钉到屏顶,正好压住左上那颗返回球;视频与微博两档的卡贴住屏幕边,
精选与相册那两档却收进 10px,上下对不齐;图片和视频缩略图还是方角(平板同漏);
视频卡的媒体与转评赞之间空 36px;"他的热门内容"这类分组标题被做成一张张带橙色竖标的卡,
读起来像一条内容;深色档下切换栏左端还糊出一条脏带、看着像缺了一角(站点为横向滚动留的
白→透明淡出罩,只在平板那一档被摘掉过,手机档漏了)。
现在:切换栏不再吸顶,跟着内容一起滑走(这一页的返回入口只有左上那颗球,两条挤在屏顶
怎么排都难看),要换分组就滚回封面下方那一格;底栏收成一颗贴底的悬浮卡片,跟首页那套
悬浮件一样下滑收起、上滑放出;卡、切换栏、分组标题落到同一条 10px 边距上;缩略图统一
14px 圆角,手机和平板都改了;空的媒体标题不再占位;分组标题改成全站那个小标签档,
右侧"更多"留着,只把橙底白箭头换成灰。
代价:分组入口不再常驻,读到底部想换分类得先滚回去;底栏不再通栏,窄 20px。 -
超话 / 话题页(
/page/<containerid>,从信息流里的超话卡片点进去)在平板上是站点原样:
内容是 797px 窄列、顶栏与底栏 1280px 宽并向右甩出屏外 241px(右半截看不见)。
这一族是站点新加的第四套页面架构——Tailwind 工具类写的
#app > div.root.w-full.max-w-[750px],既没有.main-wrap也没有.m-top-bar,
路由标记兜底落成bw-page-home,条带 / 卡片 / 顶栏规则一条都不命中。
现在按结构认这一族(html.bw-tw),把根节点与它那两个fixed的顶栏/底栏
一起收进和其它内容页同一条带。 -
同一族页面上的每条微博卡被压成 560px 小卡、内边距被改成
4px 40px 0、还套着
登录卡片的入场动画。根因是登录页(passport)那一整段样式没有限定页面:
它按div.bg-card命中,而超话页的卡片也带bg-card类——当初"m.weibo.cn 上
bg-card命中数为 0"的假设,被站点换架构打破了。现在整段选择器都带
html.bw-login前缀(标记只在 passport 域名打上)。 -
排布账
pinnedWraps是强引用数组,原先只在clearMasonry里修剪,而那是"非宽屏"才走的
分支 —— 平板恒宽屏,于是容器每被换一次就有一个已脱离文档的信息流子树被永久留在数组里。
改成新状态建立时顺手清掉断开的,数组长度跟着"当前活着的容器数"走。 -
收"打开 APP"弹层时,第二段判据用
NAG_TEXT[text]直接取真值判命中:对象字面量继承
Object.prototype,节点文案恰好是constructor之类会误命中(改成=== 1)。 -
视频里点"高清 / 标清"弹出的画质菜单不会自己收起:站点只在自己那颗按钮上翻开合,点画面、
点进度条、点别处都不收,得再点一次画质才翻得回去。现在点菜单以外任意一处即收起,
点菜单里的档位仍照常选档。 -
"点开视频默认给最高画质"只对第一条生效:去重用的标记挂在站点那条常驻的播放浮层上,
关掉再点开下一条还是同一个节点,于是第一条之后的片子全被挡着不切
(实测第一条升到 1280×720,第二条停在默认那路 853×480)。现在按这条片子自己的地址记,
换一条重新起账;手动改档仍然不干预(实测降到标清 540×960 后就停在那儿,不再被顶回最高)。 -
视频播放界面里上下滑动,会带着背后那叠微博一起滚:浮层吃的是给信息流缩略图写的那条
touch-action:pan-y(那边竖滑本来就该滚页),而"点开播放"这层是铺满整屏的,于是竖滑被
当成滚页。现在浮层开着时这个手势直接拦下:背后的页面不动,横滑跳进度、点控件、开菜单都
照常,关掉播放器后页面又能正常滚。 -
一条微博里有多条视频、或图片与视频混着时,点开看的那一层底下什么都没有(没有暂停、进度条、
时间、音量、全屏,点画面也不播):站点这种情形不走它自己的播放器,而是走看图器,里面只塞了
一个裸<video>。现在这一层也有了一条控件:播放/暂停、音量、时间、进度条(可拖)、倍速、
全屏,摆在整屏的底边(画面在竖屏里通常居中,贴着画面放等于悬在屏幕中间),翻页、缩放、
全屏时跟着走;跟正常播放器一样,播着不动约 2 秒自己淡掉,
点一下画面出来、再点一下收回去,暂停或播完时常驻。样式与正常播放器那条是同一份——控件用的是
站点自己那套 video.js 类名,一格 48 宽、图标同一号、渐变底都吃站点已经加载好的样式,不是另画
一套。这一层没有画质可选(站点在这种帖子里只给一路流),倍速就摆在那颗原来占的一格,
紧挨着全屏。
live 动图不加:它是 1~3 秒的循环短片,摆一条进度条反而像坏了的播放器,翻到动图那一页这条会
自己收起来。 -
同一层里的视频页现在按屏幕宽铺满:站点只给
<video>写了max-width/max-height:100%,
盒子大小于是跟着元素的"本征尺寸"走,而元数据没到之前那是海报的尺寸,Chrome 之后也不重算
—— 实测同一条微博两页视频,一页 411×731、另一页停在 360×640(左右各空 26px),
跟着画面走的控件条也只有 360 宽、悬在半空。改成显式按视口宽定盒子(高按画面比例走),
两页一致;全屏时同样贴屏幕底边。 -
平板首页点开大图、关掉之后,左侧那条悬浮导航和右下角的发微博球不回来了:这两个的显隐只在页面
重排账里算一次,而站点收起看图器改的是它自己那一层的类名与样式 —— 这两样都不惊动那一次重算。
实测平时是"浮层已经关了、控件慢半拍才出现",靠信息流顺带的节点增删补回来;那一趟没赶上就是
彻底不出现。现在看图层与全屏视频层收起的这一刻自己补算一次,不再等别人。
代价:无,这对控件在其它场合(内页、上滑收起、浮层压屏)的显隐规则没变。 -
平板搜索页不再整屏偏右:入口那一屏(搜索框 + 热搜榜)没有左侧分组栏,却跟着结果页一起
给栏让了位,左边空出一条白。现在让位只在点进热搜条目、分组栏真的出现那一屏生效。 -
手机端搜索页点进一条正文再返回,列表上下跳一下再跳回来:站点这一趟把整列重新渲染了
(实测返回后 87/87 个<img>都是新节点、当帧 53 张还没就绪),没回来的那张图把盒子从 115
塌成 17,滚动位置一直停在原处,看着就是内容自己在挪(实测同一张卡在视口里
495.7 → 594.1 → 495.7 → 594.1,来回 98px)。现在按图片地址记住它加载完的显示高度,
新节点没回来之前先按那个高度占位,图一到就摘掉;复测同一张卡稳定在同一位置,位移 0。
代价:某一趟里第一次见到某张图时仍会跳一次(那会儿还没有旧值可占);同一地址在别处的
显示宽度不一样时不占位,免得钉成错的高度。 -
平板双列在滑动时"上下乱跳":一条微博带 9 张以上图时,列表里要把它折成
8 张 + "+x" 牌面,而这个折叠原先只在滚动事件与 250ms 防抖里跑,排布却跑在
变异观察器的微任务里 —— 新卡先按"还没折叠"的高度被量到并写好行位,约 84ms 后
折叠才落地,卡片当场矮 134~267px,同一列下方的卡片被整体顶上去一截。
现在折叠排在测量/落位之前,量到的就是终态高度。
实测(nine_race2.py):修复前新卡插入瞬间span 399、84ms 后变span 333
(高 799→665);修复后插入瞬间就是span 333,高度不再变化。刹停逐帧判据
(竖直跳 / 换栏 / 尺寸 / 空白帧)仍全为 0,往返(首页↔正文)换列 0、文档坐标 0 变化。 -
手机端搜索页一进去左上就是空的:返回钮与搜索框被收成看不见,上滑回顶部也不放回。
收起的判据拿分类条的文档顶边去跟"搜索壳的底边"比,而壳是吸顶的,那个底边算出来是它在
文档里的位置(58),两边不在同一个坐标系,再加 34px 提前量,阈值抬到 92 —— 这一页分类条
本来只从文档 68 起头,于是停在顶部时就判成"已经到顶"。现在两个量都按视口算,
提前量收到 6px:实测滚到 64 收起、站点在 68 那一刻吸顶,接得上不留空档;
回滚到 64 以上即放回,真手势快滑三次上、三次下都不再卡在收起态。
安装前先看 README 的「已知限制」与「下载」。
pulse 1.0.3-alpha.4
pulse 1.0.3-alpha.4
Fixed
- 平板首页滑动后用手指刹停,会看到某张微博跳到另一栏(有时一次跳好几张)。
根因是"回到列表头部就清掉排布账"那一步做成了每轮都成立:首页头几屏里这个条件
一直满足,于是账每轮被清空、下一轮所有卡片都当新出现重新分栏,卡片高度一变
(图片加载完、或刹停把重排留在肉眼可见的那一帧)就成批换列。现在清账和改锚点
受同一个条件保护,只有锚确实钉在别处时才算一次真重置。
实测:同样的手势组合下,清账事件从 138 条降到 0;从深处甩回顶部时仍然照常清一次。 - 顺带补一道兜底:某张卡即使查不到账,只要它身上还挂着上一轮写的列与行,就按它继续,
不再当新卡重排。真重置时这些残留值会被一并抹掉,不会把旧位置带给新微博。
安装前先看 README 的「已知限制」与「下载」。
pulse 1.0.3-alpha.3
pulse 1.0.3-alpha.3
Fixed
- 深色档点进楼中楼页(评论下面那串回复展开成的整页)时,卡片以下会露出一大块比卡面还亮
的灰底。那是站点铺在列表底下的一层固定底,写死了浅灰,深色下被系统加深成 37 一档,
而列表卡只盖住自己那一段。现在这层改用页面底色:深色回到 #111111,浅色与原来差 1 档,
观感不变。 - 深色档楼中楼页里,评论与它下方回复之间有一条白线。同样是站点的行边框(声明是透明色,
深色下被加深成一条实心白线)与我们自己的分隔线叠在一起。去掉那条边框,分隔仍由我们的
发丝线承担;浅深两档、手机与平板都量过,线的位置和粗细没变。
安装前先看 README 的「已知限制」与「下载」。
pulse 1.0.3-alpha.2
pulse 1.0.3-alpha.2
Changed
- 正文页评论的楼中楼不再整块填底色,改成块上沿一条发丝线加站点自己的缩进。
原来那层底色深浅两档都只与卡面差 6 档:既看不出"这是一组回复",又多出一大块色块。
转发引用块(转评里的原文)仍保留填色,那条是滚动时靠色块好认才定的。 - 发布流水线不再走国内 Maven 镜像:上一次发
1.0.3-alpha.1就是镜像回 502 挂在构建那一步。
本地构建照旧默认吃镜像。
安装前先看 README 的「已知限制」与「下载」。
pulse 1.0.2-alpha.1
pulse 1.0.2-alpha.1
Added
- release 签名支持:仓库根放
keystore.properties即自动签名;未配置时产物文件名
标成-release-unsigned,避免拿一个装不上的包去装。
Changed
- 不再固定
buildToolsVersion,改由 AGP 选择,别人 clone 后不必装特定版本也能构建。 - 发布改由 tag 触发的工作流完成(构建、签名、校验、建 Release、挂 sha256),
取代原先只在 PR 上编译检查的流水线。 - 正文页评论楼中楼点开的评论详情页按全站卡片语言重做:父评论与回复收成一张卡
(18px 圆角 + 1px 描边 + 16px 内缩分隔线),"查看原微博"归到品牌蓝;
顶部只让开返回球的高度(手机 64px / 平板对齐正文页),收掉站点原地停驻的
旧正文视图(此前会从列表留白处透出)。 - 平板登录页扫码视图重修:面板锚定视口(此前从卡片原点起铺、二维码整体偏出屏幕)、
"返回"贴到白卡左上角、切扫码改为瞬切且无错位中间帧(根因是面板规则的选择器带
:has(img[src*=qr…]),二维码图 src 要等站点 API 返回才填上,此前 ~110ms 规则
不命中、站点内联定位裸奔后再跳正——选择器改为面板独有的裸 z-9999 类,
从挂载第一帧即接管);描边画在白卡上(此前手机档的 1px outline 跟着满屏面板
落到了视口边缘);深色下"微博"站标改用覆盖层绘深色版并首帧预隐藏原图
(invert 滤镜会被算法加深的图像反反相撤销,直接换 src 会被站点 Vue 回写、
且浅色文字版深色图会被再反相一次——background-image 不受这三条影响),
二维码在边框盒里居中(内层盒溢出导致的 +6,+6 偏心在深色下显形)。
手机档扫码视图同套语言:二维码描边盒补 16px 圆角,"返回"顶距从站点默认
40px 收到 14px(两档共用一条规则,平板的贴卡 calc 位在后覆盖)。 - 深色平板登录页的"微博"站标修好(手机上正常、平板上颜色全错)。三个独立成因:
① 算法加深是否反相一张图,判据是它的显示尺寸,门槛随 dpr 漂移在 105~158
设备 px 之间;这颗站标只有 62 CSS px,手机 dpr2.625 折成 163 设备 px 逃过,
平板 dpr2 只有 124 设备 px 落在门槛内,连我们绘深色版的覆盖层自己也被反相
(眼白与瞳孔对调、"微博"字从 191 压成 117)——覆盖层改为布局盒放大 6 倍再
transform: scale(1/6)缩回,视觉尺寸不变;② 首帧预隐藏原图那条规则被 JS
拼接写成'a' + /*注释*/ + 'b',第二个加号被解析成一元正号、字符串取正得
NaN,整条规则静默消失(语法合法,node --check查不出),进页面仍会闪一下
原图;③ 覆盖层只在创建时定一次位,而手机档卡片是w-full、img 位置随视口变,
转屏后偏移实测可达 94px——改为每次扫描按签名重钉,并补挂resize触发重扫。
同页另修两处观感:站标图标的四角圆度(站点原图只有左两角是圆的,右两角被一层
不透明白胶囊盖住,去底后读成"左边圆角、右边直角还带白角"——深色版按左缘逐行
轮廓镜像到右缘,只裁掉 18 个渗进图标区的白角像素,眼白与瞳孔原样保留);
"微信登录 / 扫码登录"上方那条分割线(此前用border-top画,算法加深会改写
border 颜色且映射不可预测,实测声明--bw-line=#222222 渲染成 78,比全站其它
发丝线亮一倍多、读成一条灰白带子;改box-shadow: inset 0 1px 0—— 它不参与
映射、声明即渲染,深色回到 34 一档,浅色仍是 #F2F2F2 不变)。 - 登录页按"流体界面/材质层级"过一遍设计审查,修掉审查出的 P0+P1(数值均为装机版
screencap 实测,深色档):
① 大屏扫码态那张卡硬编码background:#FFFFFF,算法加深把不透明的白映射成 18 一档,
与页面底 17 只差 1 档 → 整块隐形、只剩 outline 画出一个空框,同时成了全站第 4 种灰
(违反--bw-chip注释写下的"深色档只有 17/19/25 三档");改吃--bw-card,
投影一并换成--bw-card-box(全站卡片不叠投影),浅色档逐像素不变。
② 二维码描边盒同样是border画的:声明#E5E7EB渲染成 65,比发丝线亮近一倍 ——
改border:0+ 内缩 1pxoutline(跟随圆角、不受祖先 overflow 裁切),实测 34。
③ 分段控件选中态与输入框在深色下没有分离度(选中片 25 / 轨道 19 / 字段底 19,
对比 1.10:1,而承载层次的暗色投影压在暗底上不可见)→ 补上与卡片同源的 1px outline
作为第二条线索,实测边线 34;聚焦时仍由:focus的 2px 焦点环接管。
④ 命中区撑到 44px 以上:页签 42→45.5、忘记密码 56×33→56×44、协议整行 18→44 高
(并把 label 的 7px margin 换成 padding,勾选框与文字之间不留死区)、协议文字链
48×14→52×44、第三方两项 83×21→83×52、扫码态"返回" 50×30→78×50;勾选框本体按设计
保留 18×18(它是自绘盒,加内边距会把画面一起放大,改由紧邻的整行 label 承担面积)。
⑤ 给缺反馈的三处补 pointer-down 反馈:忘记密码/获取验证码、协议行与勾选框、扫码返回
(与页签/主按钮同一档 opacity+scale)。
两处踩过的坑记在这里:height:auto会让写了h-full(100%) 的子图标退化成原始尺寸
(返回图标 48×90 → 命中撑成 106×110),要撑命中框请用box-sizing:content-box+
固定内容高 + 等值负外边距;Tailwind 的固定高度配全站border-box会直接吃掉内边距
(第三方行第一次改完实测仍是 22 高)。 - 首页带文章的微博:文章封面圆角处透出站点压暗层形成的四角灰斑,
圆角与裁切上移到文章容器一层,压暗层与封面同角。 - 搜索结果页(点热搜词条进的那一页)三项:
① 下滑收起搜索壳后分组条贴顶并通栏(原来钉在top:14px,那 14px 里透出上面那张卡
的页脚,实测截图能看到"540"和编辑图标从缝里露出来);贴顶时卡片式 outline 换成
一条底边发丝线(pinned header 的语言,inset box-shadow不参与加深映射)。
② 分组条"显示不完整":12 项一行 676px、手机内容列只有 391px。查清两件事——
站点的.scroll-box.nav_item本来就能横滑(真手势实测 0→202,点选时还会把选中项
滚进视野 0→173),缺的只是可滑线索;而左缘那条"边框缺失"根本不是边框没画,是站点
在.m-box-col::before画了一层白→透明淡出罩(z-index 9、宽 12.75px),深色下渐变里的
#fff被加深映射成 18,既糊出一条脏带又盖住了 outline 左边线。修法:收掉那层罩,
提示改由按scrollLeft打方向性mask-image(纯 alpha 合成,不会被当成图片改写)——
左端/右端/两端三种,实测 scrollLeft 0/120/264 各自命中。
③ 平板档这一页按"固定条只能在左右侧"重做:搜索壳取消吸顶(随内容滑走,滑走后
onScreen判定自动放行左上悬浮返回球,出口不断);分组条从横条改成左侧竖栏
(fixed 在 x=100..300,12 项 40px 行高全可见,结果列让出 220px 落在 320..1180);
站点的.module-page-fragment.fixed吸顶定位一并废掉(它原来在平板会从条带
100..1180 跳到 10..1270)。选中态沿用 App 自己那条平板竖栏的语言(蓝 + 加粗 +
--bw-card-active浅底 31/25=1.28:1),不加左侧色条——inset box-shadow 会跟着
10px 圆角弯成月牙。讨论入口不用动:这一页bw-fab-disc早已把它折成右下角那颗球。
手机×平板 × 浅×深四格均已实测(浅色档边线 242、深色档 34,淡出提示两档都在)。
平板这一页再补三处:① 返回入口挪到全站规范位 —— 其他平板页的返回球在
#bw-fback(left:14 top:14),而这一页的返回是搜索壳里那颗.nt-left(实测跑到 324,16);
收掉站点那颗后 nav.js 的可见性判定自然放行浮球(/search?q=不算主标签),
球内无可代理目标时走history.back(),语义与站点返回链一致。左缘 14..54 与条带
100 起本就不互相占用,所以不必为此再缩正文卡宽度。② 搜索壳与正文之间 55px 的空壳:
分组条改 fixed 竖栏后,原来那层.module-page-fragment还占着 39.3 高 + 15.3 下外边距,
归零后首卡从 y=127 回到 y=72(实测间距 14px)。③ 图片/视频圆角:全站那一档 14px
写在.f-weibo作用域下,而这一页的媒体在.weibo-media-wraps里(实测 25/26 个
.m-img-box没有一个在.f-weibo下)→ 圆角全 0、方角图压在圆角卡里;按同档补上,
锚在.weibo-media-wraps下不碰 43px 头像盒(它要留 50% 圆 + overflow:visible,
V 认证角标才不被裁)。这条手机档同样生效(实测两档圆角集合都是 14px、九宫格 7/9 格齐)。
④ 竖向节律对齐:搜索壳与首卡之间原来给 14px,而实测卡与卡之间全是 8px
(--bw-card-gap)—— 就搜索框下面那一格明显更宽,读成"搜索框跟内容离得特别远";
改成吃同一档 8px。竖栏与内容列之间那 20px 列缝也一并收到全站--bw-gutter的 10px 档。 - 平板端左上那颗悬浮返回球改与左侧悬浮导航栏同轴:栏在 x=14..78(轴心 46),
球原来left:14(球心 34)、比栏更贴屏边,读起来像两列。改成left:26后实测
正文页与设置页的球心都是 46。位移写在left不写在transform——按压缩放的
:active用的就是 transform,写在一起会互相顶掉。手机档不叠这条(栏在底部),实测仍 14px。 - 404 出错页整页重做(手机×平板 × 浅×深四格实测)。站点那一页是服务端直出的
.h5-4box:一张 640x344 的白底小鸡位图 + 14.8px 灰字 + 一条 8.5px 带下划线的
文字链(命中框只有 34x12),整块贴左上、深浅两档都不改。现在按 nav.js 打的
html.bw-404结构标记重排成视口居中的一张卡(手机min(520px,100%)、平板与登录页
大屏档同取值 560),位图整张摘掉、标记不引任何图片,只用站点同一字体栈的字面字符:
::before排整串"404"(次级墨色),::after再排一颗品牌蓝的"0"扣在同一位置,
并先用自己的卡面底色把底下那颗灰色 0 整块盖掉(背景盒 = em 盒 + 左右各 2px 内边距,
实测中间那一格里残留的灰色墨迹像素 = 0);"返回首页"换成全站那颗主渐变胶囊(48px 高)。
三处坑记一下:①min-width在 content-box 上不含内边距,胶囊会渲成 216 宽,
必须box-sizing:border-box;② 两颗"0"能重合是因为它们同字号、同行盒(line-height:1)、
letter-spacing:0,而"404"三字对称 → 中间那颗的步进中心正好是条的中心,基线天然对齐
(实测 4 的墨迹 310..350、0 的 309..355,圆字上下各出 1px 是正确的光学过冲);
③ 卡片的上下内边距不等是刻意的(22/32)—— 首行行盒在墨迹上方还压着约 11px 空白,
而末行按钮的盒边就是它的可见边,两边都按"墨迹到卡边"量才对齐(实测 33/32)。
站点夹在文字与按钮之间的那个<br>自己占 25px 高,收掉后行距全部由卡内 padding
统一给(实测标记→文字 24px、文字→按钮 24px)。 - 手机档"我的页"右上角那颗设置胶囊收起时改成往右离开:它与左上返回球原本共用一条
.bw-scroll-hide的translateX(-190%),于是贴着右缘的胶囊收起时会横穿整条顶栏飞到
左边去。现在各走各的(球 -190%、胶囊 +190%,都是自身宽度的 1.9 倍),实测真机上滑时
胶囊 x 335→459(屏宽 411,左缘已出屏、opacity 归 0)、返回球 14→-58,两枚都是"从哪
来回哪去",位移量同档所以快慢也一致。平板档不受影响(那条在max-width:767px里)。 - 从热搜条目页点图片看大图时,图被整体右移、右缘推出屏幕(用户报"看大图压掉一部分边框")。
根因是几条"内容列加边距"的规则写成了#app > div > div这种结构选择器,而 PhotoSwipe 的
.pswp与视频层.mwb-layer同样挂在#app里(实测搜索页div#app.m-container-max > div > div.pswp):手机档被塞进 10px 左右内边距、平板档被塞 210px 左内边距外加条带宽
min(1160px, 100vw-200px),而这两层是position:fixed + width:100% + content-box——
内边距不缩内容,反而把盒子撑到 431 宽(视口才 411)。修法是一条兜底:这两层的
padding/margin 归零、width 钉回 100%,选择器写成#app#app > … > .pswp以拿到 (2,x,y)
的特异性 —— 同为!important时比的是特异性而不是书写顺序,普通#app .pswp(1,1,0)
压不过那几条 (1,2,3)。实测手机看图层回到 411x840、方形图居中 x=106..306;平板回到
1280x744、图心 (640,372) 正是视口中点;结果列边距不受影响(手机首卡 x=10 宽 391、
平板让出竖栏后首卡 x=310 宽 870),.mwb-layer本来就是 fixed + width:100%,兜底对它是零改动。 - 视频全屏后横滑看不见进度示意、长按也不切倍速。两个独立成因:
① HTML5 全屏只渲染:fullscreen那棵子树,挂在<html>上的节点根本不画
(实测往documentElement塞一块红、往fullscreenElement塞一块绿,截屏里只有绿)。
示意胶囊#bw-scrub与倍速胶囊#bw-rate原来都 append 到<html>→ 全屏时必然不可见。
现在两颗胶囊都改挂"当前全屏元素"(无全屏时仍是<html>),并在宿主变了时重新挂靠。
② 长按倍速原来只认看图器(v.closest('.pswp')),站点自己的视频浮层与全屏播放器都不在
名单里 → 长按无事发生。现在认.pswp/.mwb-layer/ 全屏元素内部三种场合,信息流里的
内联视频仍然不接(读帖时的误触面)。
装机实测(长按必须走adb shell input swipe:CDP 合成的触摸不产生 contextmenu):
全屏中横滑 → 示意纯绿块在屏上 40121 px、currentTime5.61→41.93;连续两次真长按 →
playbackRate2→1→2、倍速胶囊在全屏里也画得出来(16523 px)。 - live 图的长按改成从头重播(原先是弹下载菜单)。站点把 live 图渲染成一张只放一遍的
<video>,放过之后停在封面上没有重来的入口,长按正好补这个。实测同一分支:
currentTime41.7 → 0 且pausedtrue → false。代价要说清:live 图的"长按下载/复制地址"
入口就此没有了(原生mediaMenu/showMediaMenu保留未删,等定夺要不要换个入口)。 - 缩略图状态下的长按不再弹下载菜单(图片 / 视频 / live 图一律不弹)。信息流卡上的图长按想要的是
"放大看",弹一层"保存"等于把误触当确认;而卡上的视频与 live 图本身就是一张<video>,
平台命中测试给不出播放直链,菜单里那条"下载图片"存的其实是封面。改法是在
MainActivity.onCreateContextMenu加一道场合闸:只有看图浮层开着(galleryOpen,由 nav.js
报上来 —— 与系统返回键、下拉刷新用的是同一颗状态)才填菜单项。装机 A/B 实测
(真长按走adb shell input swipe;注意 WebView 的上下文菜单在窗口表里叫AtchDlg:<pkg>,
只 grep Popup/Menu/Dialog 会漏判成"没弹"):关掉闸时长按缩略图 0→1 个 AtchDlg 窗口(弹),
开闸后 0→0(不弹);同一个开闸的包里在看图器里长按仍然 0→1,菜单是"下载图片 / 复制图片地址"。
Fixed
- 首页快速上划/下划时微博卡片消失、约半秒才回来。逆向
main.b53719c4.js定位到两个成因:
① 站点的窗口化补插是is_scrolling闩 +setTimeout(300)节拍,而 scrollTop 在监听入口
捕获、300ms 后才在节拍里使用 —— 硬甩一拍差出 10002000px;换向后的第一拍更是整拍浪费300ms 底部瞬态;回顶按钮、下拉刷新、慢速滚动与控制台
(手里的 s 还是旧方向深处的位置,算出的 a≈0 什么都不做),第二拍(再 300ms)才真正补插,
视口在这600ms 里冲出窗口露出整段空白(screencast 逐帧实测换向后顶部两列同时空洞 0.4s+,0.8s 常态出现;修复后 8 轮连续快甩(含冷启动与深翻)无 >300px/120ms
与用户报的"隔约半秒"吻合)。② nav.js 的行位固定布局有一条次生缺陷被泵放大:站点大步上插
把窗口送回列表头时会清零padding_top并整窗替换为头部一页,而 nav.js 的重置判定额外要求
(scrollY<60 || cur<5),此时不触发 ——ourPad钉在旧值(2100px),网格整体被压到视口2s 空白(探针实测 1962ms)。修法(在宽屏接管期内生效,与
下方,顶部露出 1.hei减半
同进退):接管vm.scrolling,账目分支逐行照抄站点、只改两点 —— s 改为节拍执行时现读、
节拍间隔 300ms→80ms(换向第一拍拿到的就是新方向);②那条次生缺陷的锚点与重置判定
见下一条。实测(同一adb input swipe高应力脚本、逐帧 DOM 覆盖率判据):修复前换向
后顶部整段空白 0.4
的空洞,残留仅网络往返级的 130
均无回归。要说清的是:这条"DOM 覆盖率"判据偏松,下一条换了更严的判据又测到残留。 - 首页快速甩动时偶发整屏没有微博卡片、约 0.5s 后恢复。逐帧采样探针(
真手势adb shell input swipe;判据 = 有卡且已量高,但视口内一张都不相交)确认这是
视口冲出了站点虚拟列表的渲染窗口:补插是被动的、按节拍跑的,而硬 fling 两拍之间
能冲 1100~2700px,节拍追不上(平板实测最长连空 26 帧 ≈ 430ms,
手机单列也测到 13 帧 ≈ 220ms,不是平板独有)。这条链路上确实错了的两处已修:
① 一次甩动把整窗换掉时幸存卡为 0,行号只能从 0 重排,锚点必须换成站点对新窗口算好的偏移,
原来沿用旧锚点 → 内容留在原地而视口已经走远;锚点改为按Σ 窗口之前条目的 .hei现算
(anchorOf),不读padding_top—— 站点在"回插拿不到条目"的分支里会把它直接写成 0。
② 重置判定的帮衬条件换了一条更准的:原来靠(scrollY<60 || cur<5)猜"页面在顶部附近",
而泵(节拍现读 s)之后硬甩回顶经常精确落在 y≈600 处不触发 ——ourPad钉在旧值(2100px),2s 空白(探针实测 1962ms)。改判"窗口真的在已加载列表
网格整体被压到视口下方,顶部露出 1
头部"(list_all.indexOf(list_cur[0]) === 0):站点中途乱写padding_top = 0的那一型
假重置,窗口在列表中段,正好被它排除,不必再借滚动位置帮衬。
剩下的"一拍之间冲出窗口"没有解决:按帧推进窗口的原型实测把平板空帧从 12 起打到 0,但它和
泵那一拍的账目打架(拦掉站点用旧since的回插之后,上方补插整个不工作了),硬上甩反而
把窗口整个倒回列表头,更糟,已回退。要根治得由我们自己接管窗口化(不再借站点的节拍),
改动量大,待定夺。
安装前先看 README 的「已知限制」与「下载」。
pulse 1.0.1-alpha.1
pulse 1.0.1-alpha.1
首次公开。这是预发布版本:只在 Android 模拟器的手机与平板两种配置上验证过,
没有自动化测试,真机覆盖有限。
Added
- m.weibo.cn 的 WebView 容器:登录不外跳(拦截
sinaweibo://等自定义协议)、
返回键走网页历史、全屏视频交给原生容器、错误页与重试。 - 深浅色跟随系统:算法加深 + 图片/玻璃态补偿(头像反相规避、logo 保护、头像不垫白底)。
- 平板与横屏自适应:信息流双列、正文页限宽居中、悬浮导航改竖排。
- 悬浮导航与发博球,下滑自动收起;无返回入口的老架构页面用悬浮返回球兜底。
- 首页关注分组选择框;私信会话页与分组弹层让出下拉刷新手势。
- 信息流广告拦截(百度联盟槽位的三层请求)。
- 长按图片下载 / 复制图片地址(走系统
DownloadManager,存到Pictures/pulse/)。 - 视频滑动快进快退。
- 会话失效时按
/api/config纠正登录态,避免停在登录页。 - 构建产物按
pulse-<版本>-<变体>.apk复制到仓库外的产物目录。
Known issues
- 平板双列在图片加载完成时仍有单列内部重排造成的轻微跳动(实测 0.28–1.04 次/万像素)。
- 深色顶栏切换瞬间的闪烁:已按"预热
backdrop-filter"改动,但缺少可复现证据,未验证。 - 注入规则依赖站点类名,微博改版会导致部分页面样式回退。
安装前先看 README 的「已知限制」与「下载」。