mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-11 13:56:15 -08:00
176 lines
4.8 KiB
JavaScript
176 lines
4.8 KiB
JavaScript
import { errorHandle, addClass } from '../utils';
|
|
import Component from '../utils/component';
|
|
import fullscreen from './fullscreen';
|
|
import fullscreenWeb from './fullscreenWeb';
|
|
import pip from './pip';
|
|
import playAndPause from './playAndPause';
|
|
import progress from './progress';
|
|
import subtitle from './subtitle';
|
|
import time from './time';
|
|
import volume from './volume';
|
|
import setting from './setting';
|
|
import thumbnails from './thumbnails';
|
|
import screenshot from './screenshot';
|
|
import quality from './quality';
|
|
|
|
export default class Control extends Component {
|
|
constructor(art) {
|
|
super(art);
|
|
|
|
this.name = 'control';
|
|
|
|
const { option } = art;
|
|
|
|
art.on('ready', () => {
|
|
this.add(
|
|
progress({
|
|
name: 'progress',
|
|
disable: option.isLive,
|
|
position: 'top',
|
|
index: 10,
|
|
}),
|
|
);
|
|
|
|
this.add(
|
|
thumbnails({
|
|
name: 'thumbnails',
|
|
disable: !option.thumbnails.url || option.isLive,
|
|
position: 'top',
|
|
index: 20,
|
|
}),
|
|
);
|
|
|
|
this.add(
|
|
playAndPause({
|
|
name: 'playAndPause',
|
|
disable: false,
|
|
position: 'left',
|
|
index: 10,
|
|
}),
|
|
);
|
|
|
|
this.add(
|
|
volume({
|
|
name: 'volume',
|
|
disable: false,
|
|
position: 'left',
|
|
index: 20,
|
|
}),
|
|
);
|
|
|
|
this.add(
|
|
time({
|
|
name: 'time',
|
|
disable: option.isLive,
|
|
position: 'left',
|
|
index: 30,
|
|
}),
|
|
);
|
|
|
|
this.add(
|
|
quality({
|
|
name: 'quality',
|
|
disable: option.quality.length === 0,
|
|
position: 'right',
|
|
index: 10,
|
|
}),
|
|
);
|
|
|
|
this.add(
|
|
screenshot({
|
|
name: 'screenshot',
|
|
disable: !option.screenshot,
|
|
position: 'right',
|
|
index: 20,
|
|
}),
|
|
);
|
|
|
|
this.add(
|
|
subtitle({
|
|
name: 'subtitle',
|
|
disable: !option.subtitle.url,
|
|
position: 'right',
|
|
index: 30,
|
|
}),
|
|
);
|
|
|
|
this.add(
|
|
setting({
|
|
name: 'setting',
|
|
disable: !option.setting,
|
|
position: 'right',
|
|
index: 40,
|
|
}),
|
|
);
|
|
|
|
this.add(
|
|
pip({
|
|
name: 'pip',
|
|
disable: !option.pip,
|
|
position: 'right',
|
|
index: 50,
|
|
}),
|
|
);
|
|
|
|
this.add(
|
|
fullscreenWeb({
|
|
name: 'fullscreenWeb',
|
|
disable: !option.fullscreenWeb,
|
|
position: 'right',
|
|
index: 60,
|
|
}),
|
|
);
|
|
|
|
this.add(
|
|
fullscreen({
|
|
name: 'fullscreen',
|
|
disable: !option.fullscreen,
|
|
position: 'right',
|
|
index: 70,
|
|
}),
|
|
);
|
|
|
|
option.controls.forEach(item => {
|
|
this.add(item);
|
|
});
|
|
});
|
|
}
|
|
|
|
add(getOption, callback) {
|
|
const option = typeof getOption === 'function' ? getOption(this.art) : getOption;
|
|
errorHandle(
|
|
['top', 'left', 'right'].includes(option.position),
|
|
`Control option.position must one of 'top', 'left', 'right'`,
|
|
);
|
|
const { $progress, $controlsLeft, $controlsRight } = this.art.template;
|
|
|
|
switch (option.position) {
|
|
case 'top':
|
|
this.$parent = $progress;
|
|
break;
|
|
case 'left':
|
|
this.$parent = $controlsLeft;
|
|
break;
|
|
case 'right':
|
|
this.$parent = $controlsRight;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
super.add(option, $ref => {
|
|
if (
|
|
!option.disable &&
|
|
option.position !== 'top' &&
|
|
!($ref.firstElementChild && $ref.firstElementChild.tagName === 'I')
|
|
) {
|
|
addClass($ref, 'art-control-onlyText');
|
|
}
|
|
|
|
if (callback) {
|
|
callback($ref, this, this.art);
|
|
}
|
|
});
|
|
}
|
|
}
|