Developer
|
e3def7d01b
|
fix: 修复小窗闭包过期、详情页 loading 卡死、视频播放器性能问题
- 小窗 PanResponder 用 storeRef 替代闭包捕获,修复 roomId/bvid 始终为初始值
- useLiveDetail 用 ref 比对替代 cancelled 标志,防止 fetch 被意外取消
- 详情页 useLayoutEffect 同步清除小窗,BigVideoCard 小窗活跃时跳过播放
- 视频播放器竖屏/全屏互斥渲染,减半解码器占用
- onProgress 节流 + 退出全屏强制恢复播放
|
2026-03-25 15:03:49 +08:00 |
|
Developer
|
68b8b7d665
|
fix: 彻底修复小窗无法拖动问题
根本原因:TouchableOpacity 内嵌在 PanResponder Animated.View 内,
JS层 TouchableOpacity 与 Video 原生层共同阻断了 PanResponder 响应权。
修复方案:
- onStartShouldSetPanResponder: true,从 start 阶段独占响应权
- 移除主内容区的 TouchableOpacity,改用纯 View
- isDragging ref 区分点击与拖动:位移 >5px 为拖动
- onPanResponderRelease 通过 locationX/Y 坐标判断点击目标(关闭 or 跳转)
- Video 外层 View 加 pointerEvents='none' 防止原生层吞噬触摸
|
2026-03-25 13:36:28 +08:00 |
|
Developer
|
2bfc9f8110
|
fix: 修复小窗无法拖动的问题
onStartShouldSetPanResponder 被内部 TouchableOpacity 抢占响应权。
改用 onMoveShouldSetPanResponderCapture:位移 >3px 时从子组件夺回响应权,
点击仍正常透传到 TouchableOpacity。
|
2026-03-25 13:28:49 +08:00 |
|
Developer
|
0ffb331971
|
feat: 小窗拖动后自动吸附到左/右屏幕边缘
|
2026-03-25 13:25:34 +08:00 |
|
Developer
|
33a3148b38
|
feat: 直播小窗播放(PiP)功能
- 新增 store/liveStore.ts:Zustand store,存储小窗直播状态(roomId/title/cover/hlsUrl)
- 新增 components/LiveMiniPlayer.tsx:可拖动悬浮迷你直播播放器
- 原生端实际播放 HLS 流(react-native-video,有声)
- Web 端降级展示封面图 + LIVE 徽标
- LIVE 红点徽标 + 标题条底部
- 关闭按钮(×)和点击进入直播间
- HLS 出错时自动关闭(onError → clearLive)
- 视频 MiniPlayer 激活时自动上移避免重叠
- _layout.tsx:全局挂载 <LiveMiniPlayer />
- live/[roomId].tsx:顶部栏添加小窗按钮(browsers-outline)
- 仅直播中且有流地址时显示,离线时占位保持 title 居中
- 点击后 setLive + router.back(),返回首页继续看直播
- 进入同房间时自动 clearLive() 避免双播
|
2026-03-25 13:16:16 +08:00 |
|