import { logger } from './logger' /** * 导航滚动收缩共享 handler。 * * v2 导航形态:进入页面是内容区的衬线大标题,向下滚动后收缩为居中玻璃小标题。 * 页面侧只接入一行(scroll-view 用 bindscroll,页面级滚动用 onPageScroll): * Page({ onNavScroll: navScroll }) // * Page({ onPageScroll: navPageScroll }) // 页面级滚动 * * 性能:只在跨越阈值时 setData 一次,绝不逐帧更新。 */ // 日志模块名 const LOG = 'nav' // 滚动超过该距离(px)即切换为玻璃小标题态 export const NAV_THRESHOLD = 24 function apply(ctx: any, scrollTop: number): void { if (!ctx || !ctx.data) return const next = scrollTop > NAV_THRESHOLD if (next === !!ctx.data.navScrolled) return // 仅在首次进入玻璃态时打点,避免滚动过程刷屏 if (next && !ctx.__navLogged) { ctx.__navLogged = true logger.debug(LOG, '导航进入玻璃态, scrollTop=', scrollTop) } ctx.setData({ navScrolled: next }) } /** scroll-view 的 bindscroll 处理器 */ export function navScroll(this: any, e: { detail?: { scrollTop?: number } }): void { apply(this, (e && e.detail && e.detail.scrollTop) || 0) } /** 页面级滚动的 onPageScroll 处理器 */ export function navPageScroll(this: any, e: { scrollTop?: number }): void { apply(this, (e && e.scrollTop) || 0) }