feat: 播放控制移入页眉 + 媒体铺满智能裁切
页眉播放控制(仅媒体轮播页): - 新增 MediaHeaderControls:播放/暂停、上一段/下一段、序号、当前文件名(点击进后台)、声音解锁 - 新增 mediaControl 共享状态桥:媒体页同步播放状态,页眉订阅渲染并下发指令 - 移除媒体页底部控制区,媒体区保持纯净全屏 媒体展示: - .ms-media 改为 object-fit: cover,填满整个容器并智能居中裁切(原 contain 留黑边) 修复: - MediaScreen useEffect 依赖数组引用后声明函数导致的 TDZ 崩溃 - 清理 MediaScreen 中不再使用的 Icon/cleanName/togglePlayPause
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
/* =========================================================
|
||||
媒体播放控制桥 —— 页眉控制区与媒体页之间的共享状态
|
||||
· 媒体页把播放状态同步进来(paused/index/total/name/soundBlocked/loaded)
|
||||
· 页眉控制区订阅状态渲染,并通过 mediaCommand() 下发指令
|
||||
========================================================= */
|
||||
|
||||
let state = {
|
||||
paused: false,
|
||||
index: 0,
|
||||
total: 0,
|
||||
name: '',
|
||||
soundBlocked: false,
|
||||
loaded: false,
|
||||
};
|
||||
|
||||
const listeners = new Set();
|
||||
|
||||
export function setMediaUiState(patch) {
|
||||
state = { ...state, ...patch };
|
||||
listeners.forEach((fn) => fn(state));
|
||||
}
|
||||
|
||||
export function getMediaUiState() {
|
||||
return state;
|
||||
}
|
||||
|
||||
/** 订阅状态,返回取消函数 */
|
||||
export function onMediaUiState(fn) {
|
||||
listeners.add(fn);
|
||||
fn(state);
|
||||
return () => listeners.delete(fn);
|
||||
}
|
||||
|
||||
/** 页眉控制区下发指令(媒体页监听 dpm:media-control 执行) */
|
||||
export function mediaCommand(action, params) {
|
||||
window.dispatchEvent(new CustomEvent('dpm:media-control', { detail: { action, params } }));
|
||||
}
|
||||
Reference in New Issue
Block a user