mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-18 19:01:20 -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
72 lines
1.7 KiB
JavaScript
72 lines
1.7 KiB
JavaScript
import clickInit from './clickInit'
|
|
import gestureInit from './gestureInit'
|
|
import globalInit from './globalInit'
|
|
import hoverInit from './hoverInit'
|
|
import moveInit from './moveInit'
|
|
import resizeInit from './resizeInit'
|
|
import updateInit from './updateInit'
|
|
import viewInit from './viewInit'
|
|
|
|
export default class Events {
|
|
constructor(art) {
|
|
this.destroyEvents = new Set()
|
|
this.proxy = this.proxy.bind(this)
|
|
this.hover = this.hover.bind(this)
|
|
|
|
clickInit(art, this)
|
|
hoverInit(art, this)
|
|
moveInit(art, this)
|
|
resizeInit(art, this)
|
|
gestureInit(art, this)
|
|
viewInit(art, this)
|
|
globalInit(art, this)
|
|
updateInit(art, this)
|
|
}
|
|
|
|
proxy(target, name, callback, option = {}) {
|
|
if (Array.isArray(name)) {
|
|
return name.map(item => this.proxy(target, item, callback, option))
|
|
}
|
|
|
|
target.addEventListener(name, callback, option)
|
|
const destroy = () => target.removeEventListener(name, callback, option)
|
|
this.destroyEvents.add(destroy)
|
|
return destroy
|
|
}
|
|
|
|
hover(target, mouseenter, mouseleave) {
|
|
if (mouseenter) {
|
|
this.proxy(target, 'mouseenter', mouseenter)
|
|
}
|
|
if (mouseleave) {
|
|
this.proxy(target, 'mouseleave', mouseleave)
|
|
}
|
|
}
|
|
|
|
remove(destroyEvent) {
|
|
if (this.destroyEvents.has(destroyEvent)) {
|
|
try {
|
|
destroyEvent()
|
|
}
|
|
catch (error) {
|
|
console.warn('Failed to remove event listener:', error)
|
|
}
|
|
finally {
|
|
this.destroyEvents.delete(destroyEvent)
|
|
}
|
|
}
|
|
}
|
|
|
|
destroy() {
|
|
for (const destroyEvent of this.destroyEvents) {
|
|
try {
|
|
destroyEvent()
|
|
}
|
|
catch (error) {
|
|
console.warn('Failed to destroy event listener:', error)
|
|
}
|
|
}
|
|
this.destroyEvents.clear()
|
|
}
|
|
}
|