mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-12 15:26:16 -08:00
- Updated Artplayer class to specify environment as 'development' | 'production'. - Refined template query method to return specific element types. - Improved event proxy method to handle multiple event names. - Enhanced storage get method to support both key retrieval and full record retrieval. - Modified i18n interface to include language initialization and partial language records. - Adjusted notice interface to provide a getter for show state and a setter for messages. - Updated layers, controls, and contextmenu to allow undefined elements. - Enhanced subtitle interface with initialization method. - Refined hotkey methods to use KeyboardEvent instead of Event. - Updated setting methods to return updated settings instead of arrays. - Improved plugin method to return a promise. - Added new events for video handling and refined existing event parameters. - Enhanced option interface for proxy and plugins to support promises. - Updated player interface to include reset method. - Refined setting props to allow optional values. - Enhanced template interface with additional control elements. - Improved utils methods for querying and manipulating DOM elements. fix: update type definitions for notice and subtitle properties, and refine event types fix: remove unnecessary console warnings in event listener error handling fix: refactor event listener management to use Set for better performance and error handling
97 lines
2.1 KiB
JavaScript
97 lines
2.1 KiB
JavaScript
import { isMobile } from './utils'
|
|
|
|
export default class Hotkey {
|
|
constructor(art) {
|
|
this.art = art
|
|
this.keys = {}
|
|
|
|
if (!isMobile) {
|
|
this.init()
|
|
}
|
|
}
|
|
|
|
init() {
|
|
const { constructor } = this.art
|
|
|
|
if (this.art.option.hotkey) {
|
|
this.add('Escape', () => {
|
|
if (this.art.fullscreenWeb) {
|
|
this.art.fullscreenWeb = false
|
|
}
|
|
})
|
|
|
|
this.add('Space', () => {
|
|
this.art.toggle()
|
|
})
|
|
|
|
this.add('ArrowLeft', () => {
|
|
this.art.backward = constructor.SEEK_STEP
|
|
})
|
|
|
|
this.add('ArrowUp', () => {
|
|
this.art.volume += constructor.VOLUME_STEP
|
|
})
|
|
|
|
this.add('ArrowRight', () => {
|
|
this.art.forward = constructor.SEEK_STEP
|
|
})
|
|
|
|
this.add('ArrowDown', () => {
|
|
this.art.volume -= constructor.VOLUME_STEP
|
|
})
|
|
}
|
|
|
|
this.art.on('document:keydown', (event) => {
|
|
if (this.art.isFocus) {
|
|
const tag = document.activeElement.tagName.toUpperCase()
|
|
const editable = document.activeElement.getAttribute('contenteditable')
|
|
if (
|
|
tag !== 'INPUT'
|
|
&& tag !== 'TEXTAREA'
|
|
&& editable !== ''
|
|
&& editable !== 'true'
|
|
&& !event.altKey
|
|
&& !event.ctrlKey
|
|
&& !event.metaKey
|
|
&& !event.shiftKey
|
|
) {
|
|
const events = this.keys[event.code]
|
|
if (events) {
|
|
event.preventDefault()
|
|
for (let index = 0; index < events.length; index++) {
|
|
events[index].call(this.art, event)
|
|
}
|
|
this.art.emit('hotkey', event)
|
|
}
|
|
}
|
|
}
|
|
this.art.emit('keydown', event)
|
|
})
|
|
}
|
|
|
|
add(key, event) {
|
|
if (this.keys[key]) {
|
|
if (!this.keys[key].includes(event)) {
|
|
this.keys[key].push(event)
|
|
}
|
|
}
|
|
else {
|
|
this.keys[key] = [event]
|
|
}
|
|
return this
|
|
}
|
|
|
|
remove(key, event) {
|
|
if (this.keys[key]) {
|
|
const index = this.keys[key].indexOf(event)
|
|
if (index !== -1) {
|
|
this.keys[key].splice(index, 1)
|
|
}
|
|
if (this.keys[key].length === 0) {
|
|
delete this.keys[key]
|
|
}
|
|
}
|
|
return this
|
|
}
|
|
}
|