import { append } from './utils'; export default class Info { constructor(art) { this.art = art; this.init(); } init() { const { template: { $infoClose }, events: { proxy }, } = this.art; proxy($infoClose, 'click', () => { this.show = false; }); this.art.on('destroy', () => { if (this.timer) { clearTimeout(this.timer); } }); } creatInfo() { const infoHtml = []; infoHtml.push(`
Player version:
__VERSION__
`); infoHtml.push(`
Video url:
${this.art.option.url}
`); infoHtml.push(`
Video volume:
`); infoHtml.push(`
Video time:
`); infoHtml.push(`
Video duration:
`); infoHtml.push(`
Video resolution:
x
`); return infoHtml.join(''); } readInfo() { const { $infoPanel, $video } = this.art.template; const types = Array.from($infoPanel.querySelectorAll('[data-video]')); types.forEach(item => { const value = $video[item.dataset.video]; if (value !== undefined) { item.innerHTML = typeof value === 'number' ? value.toFixed(2) : value; } else { item.innerHTML = 'unknown'; } }); } loop() { this.readInfo(); this.timer = setTimeout(() => { this.readInfo(); this.loop(); }, 1000); } set show(value) { const { $player, $infoPanel } = this.art.template; if (value) { this.state = true; $player.classList.add('artplayer-info-show'); if (!$infoPanel.innerHTML) { append($infoPanel, this.creatInfo()); } clearTimeout(this.timer); this.loop(); this.art.emit('info:show'); } else { this.state = false; $player.classList.remove('artplayer-info-show'); clearTimeout(this.timer); this.art.emit('info:hide'); } } toggle() { this.show = !this.state; } }