mirror of
https://github.com/the1812/Bilibili-Evolved.git
synced 2025-11-04 21:22:45 +08:00
65 lines
1.9 KiB
TypeScript
65 lines
1.9 KiB
TypeScript
import { ComponentMetadata } from '@/components/types'
|
|
import { videoChange, VideoChangeCallback } from '@/core/observer'
|
|
import { createHook, isBwpVideo } from '@/core/utils'
|
|
import { playerUrls } from '@/core/utils/urls'
|
|
|
|
const entry = async () => {
|
|
let lastAid: string
|
|
const removeCover = () => document.body.style.removeProperty('--cover-url')
|
|
const videoPrototype = await isBwpVideo() ? BwpElement.prototype : HTMLVideoElement.prototype
|
|
// bpx player 改了 video.play(), hook 直接挂 HTMLVideoElement.prototype 上没效果 (#3698)
|
|
const bpxPlayer = dq('.bpx-player-video-wrap')
|
|
const isBpxPlayer = Boolean(bpxPlayer)
|
|
createHook(videoPrototype, 'play', () => {
|
|
removeCover()
|
|
return true
|
|
})
|
|
if (isBpxPlayer) {
|
|
videoChange(() => {
|
|
console.debug('isBpxPlayer')
|
|
const currentBpxVideo = dq('.bpx-player-video-wrap video') as HTMLVideoElement
|
|
if (!currentBpxVideo) {
|
|
console.warn('bpx player not found')
|
|
return
|
|
}
|
|
createHook(currentBpxVideo, 'play', () => {
|
|
removeCover()
|
|
return true
|
|
})
|
|
})
|
|
}
|
|
const showCover: VideoChangeCallback = async ({ aid }) => {
|
|
if (!aid) {
|
|
console.warn('[播放前显示封面] 未找到av号')
|
|
return
|
|
}
|
|
if (aid === lastAid) {
|
|
return
|
|
}
|
|
lastAid = aid
|
|
const { VideoInfo } = await import('@/components/video/video-info')
|
|
const info = new VideoInfo(aid)
|
|
await info.fetchInfo()
|
|
document.body.style.setProperty('--cover-url', `url('${info.coverUrl}')`)
|
|
}
|
|
videoChange(showCover)
|
|
}
|
|
export const component: ComponentMetadata = {
|
|
name: 'showCoverBeforePlay',
|
|
displayName: '播放前显示封面',
|
|
urlInclude: playerUrls,
|
|
entry,
|
|
instantStyles: [
|
|
{
|
|
name: 'showCoverBeforePlay',
|
|
style: () => import('./cover.scss'),
|
|
},
|
|
],
|
|
description: {
|
|
'zh-CN': '在视频开始播放前, 在播放器中显示封面.',
|
|
},
|
|
tags: [
|
|
componentsTags.video,
|
|
],
|
|
}
|