Files
ArtPlayer/packages/artplayer/src/player/subtitleOffsetMix.js
T
2022-02-11 11:20:54 +08:00

43 lines
1.4 KiB
JavaScript

import { def } from '../utils';
export default function subtitleOffsetMix(art) {
const { clamp } = art.constructor.utils;
const { notice, template, i18n } = art;
let offsetCache = 0;
let cuesCache = [];
art.on('subtitle:switch', () => {
cuesCache = [];
});
def(art, 'subtitleOffset', {
get() {
return offsetCache;
},
set(value) {
if (template.$track && template.$track.track) {
const cues = Array.from(template.$track.track.cues);
offsetCache = clamp(value, -5, 5);
for (let index = 0; index < cues.length; index++) {
const cue = cues[index];
if (!cuesCache[index]) {
cuesCache[index] = {
startTime: cue.startTime,
endTime: cue.endTime,
};
}
cue.startTime = clamp(cuesCache[index].startTime + offsetCache, 0, art.duration);
cue.endTime = clamp(cuesCache[index].endTime + offsetCache, 0, art.duration);
}
art.subtitle.update();
notice.show = `${i18n.get('Subtitle Offset')}: ${value}s`;
art.emit('subtitleOffset', value);
} else {
art.emit('subtitleOffset', 0);
}
},
});
}