mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-16 09:36:16 -08:00
74 lines
2.7 KiB
JavaScript
74 lines
2.7 KiB
JavaScript
import getVttArray from './getVttArray';
|
|
|
|
export default function artplayerPluginVttThumbnail(option) {
|
|
return async (art) => {
|
|
const {
|
|
constructor: {
|
|
utils: { setStyle, isMobile },
|
|
},
|
|
template: { $progress },
|
|
} = art;
|
|
|
|
let timer = null;
|
|
const thumbnails = await getVttArray(option.vtt);
|
|
|
|
function showThumbnails($control, find, width) {
|
|
setStyle($control, 'backgroundImage', `url(${find.url})`);
|
|
setStyle($control, 'height', `${find.h}px`);
|
|
setStyle($control, 'width', `${find.w}px`);
|
|
setStyle($control, 'backgroundPosition', `-${find.x}px -${find.y}px`);
|
|
if (width <= find.w / 2) {
|
|
setStyle($control, 'left', 0);
|
|
} else if (width > $progress.clientWidth - find.w / 2) {
|
|
setStyle($control, 'left', `${$progress.clientWidth - find.w}px`);
|
|
} else {
|
|
setStyle($control, 'left', `${width - find.w / 2}px`);
|
|
}
|
|
}
|
|
|
|
art.controls.add({
|
|
name: 'thumbnails',
|
|
position: 'top',
|
|
index: 20,
|
|
style: option.style || {},
|
|
mounted($control) {
|
|
art.on('setBar', async (type, percentage, event) => {
|
|
const isMobileDroging = type === 'played' && event && isMobile;
|
|
|
|
if (type === 'hover' || isMobileDroging) {
|
|
const width = $progress.clientWidth * percentage;
|
|
const second = percentage * art.duration;
|
|
setStyle($control, 'display', 'flex');
|
|
|
|
const find = thumbnails.find((item) => second >= item.start && second <= item.end);
|
|
if (!find) return setStyle($control, 'display', 'none');
|
|
|
|
if (width > 0 && width < $progress.clientWidth) {
|
|
showThumbnails($control, find, width);
|
|
} else {
|
|
if (!isMobile) {
|
|
setStyle($control, 'display', 'none');
|
|
}
|
|
}
|
|
|
|
if (isMobileDroging) {
|
|
clearTimeout(timer);
|
|
timer = setTimeout(() => {
|
|
setStyle($control, 'display', 'none');
|
|
}, 500);
|
|
}
|
|
}
|
|
});
|
|
},
|
|
});
|
|
|
|
return {
|
|
name: 'artplayerPluginVttThumbnail',
|
|
};
|
|
};
|
|
}
|
|
|
|
if (typeof window !== 'undefined') {
|
|
window['artplayerPluginVttThumbnail'] = artplayerPluginVttThumbnail;
|
|
}
|