UNPKG

ps-tcplayer

Version:

Tencent Cloud Player component with Vue2/Vue3 compatibility

113 lines (99 loc) 2.92 kB
import rateHtml from './index.html' import './index.scss' import { parseDom } from '../../utils' /** * 倍速播放组件 */ export default class RateComponent { /** * @constructor 倍速播放组件构造函数 */ constructor(player) { this.html = parseDom(rateHtml) this.player = player this.hasCreated = false this.rate = this.getRate() } createEl(el) { try { if (!el) { console.warn('RateComponent: DOM元素不存在'); return; } let eleControlbar = el.querySelector('.vjs-control-bar'); if (!eleControlbar) { console.warn('RateComponent: 无法找到控制栏元素,尝试添加到根元素'); el.appendChild(this.html); return; } eleControlbar.appendChild(this.html); } catch (err) { console.error('RateComponent创建DOM元素失败:', err); } } created() { if (this.hasCreated == false) { if (this.rate) { this.player.playbackRate(parseFloat(this.rate)) let li_target_current = this.html.querySelector(`li[class="current"]`) if (li_target_current) { li_target_current.className = '' } let li_target = this.html.querySelector(`li[data-rate="${this.rate}"]`) if (li_target) { li_target.className = 'current' } } else { this.rate = '1.0' } let currentRateEle = this.html.querySelector('.current-rate') currentRateEle.innerText = this.rate + 'x' } this.hasCreated = true } ready() { let currentRateEle = this.html.querySelector('.current-rate') let rateListEle = this.html.querySelector('.rate-list') let timeId = null let settingRate = document.querySelector('.vcp-rate') if (settingRate) { settingRate.style.display = 'none' } currentRateEle.onclick = () => { rateListEle.style.display = 'block' } currentRateEle.onmouseleave = () => { timeId = setTimeout(() => { rateListEle.style.display = 'none' }, 100) } rateListEle.onmouseenter = () => { clearTimeout(timeId) } rateListEle.onmouseleave = () => { rateListEle.style.display = 'none' } rateListEle.onclick = ({ target }) => { let rate = target.dataset.rate if (rate) { this.player.playbackRate(parseFloat(rate)) if (target.className !== 'current') { let currentEle = rateListEle.querySelector('.current') if (currentEle) { currentEle.className = '' } target.className = 'current' } rateListEle.style.display = 'none' currentRateEle.innerText = rate + 'x' this.setRate(rate) } } } setRate(Rate) { localStorage.setItem("cto_video_Rate", Rate) } getRate() { return localStorage.getItem("cto_video_Rate") } }