mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-12 23:36:15 -08:00
* chore: Bump artplayer-plugin-danmuku version to 5.1.0 * chore: Update danmuku plugin with new mount option * chore: Update danmuku plugin with new mount option * chore: Update danmuku plugin with new mount option * chore: Update danmuku plugin with new mount option * chore: Update danmuku plugin with new mount option * chore: Update danmuku plugin with new mount option * chore: Refactor getDanmuTop function to handle additional cases * chore: Refactor getDanmuTop function to handle additional cases * chore: Update danmuku plugin with new mount option * chore: Update danmuku plugin with new mount option * chore: Refactor danmuku plugin to always create a new Setting instance * Refactor danmuku plugin to always create a new Setting instance * Refactor danmuku plugin to always create a new Setting instance * Update danmuku.js * Update danmuku.js * Refactor danmuku plugin to include a new Setting instance * Refactor danmuku plugin to include a new Setting instance * Refactor danmuku plugin styles for better alignment and spacing * Refactor danmuku plugin styles for better alignment and spacing * Refactor danmuku plugin styles for better alignment and spacing * Refactor danmuku plugin styles for better alignment and spacing * Refactor danmuku plugin styles for better alignment and spacing * chore: Update package.json files * Refactor danmuku plugin to remove unnecessary whitespace in the setting template * chore: Remove ESLint configuration files and update npm dependencies * chore: Update ESLint configuration to disable console warnings and fix unused variable warnings * chore: Update ESLint configuration to fix quotes rule * Update package.json * Update package.json * Update setting.js * chore: Compress CSS code in build script * chore: Update build script to compress JavaScript code * chore: Update build script to compress JavaScript code * chore: Refactor setting.js to improve code organization and remove unused variables * chore: Add isHover flag to Control component for better control hiding behavior * chore: Update Control component to use $bottom instead of $controls for better control hiding behavior * Update package.json * Update package.json * Update package.json * chore: Update lerna.json to use independent versioning and yarn as npm client * refactor: Update Danmuku class to support configurable modes and visibility * refactor: Update Danmuku styles for better visibility and configurability * feat: Update font weight in Danmuku styles for better readability * refactor: Update Danmuku class to support configurable modes and visibility * refactor: Add opacity, area, font, and speed sliders to Danmuku settings * refactor: Initialize sliders for opacity, area, font, and speed in Danmuku settings * feat: Add slider UI for opacity, area, and speed in Danmuku settings * feat: Update slider styles in Danmuku settings for better visibility and configurability * refactor: Improve Danmuku settings UI for better visibility and configurability * refactor: Improve Danmuku settings UI for better visibility and configurability * refactor: Update slider styles in Danmuku settings for better visibility and configurability * refactor: Update margin slider initialization in Danmuku settings * refactor: Update slider styles and initialization in Danmuku settings * refactor: Update Danmuku class to support configurable visibility * refactor: Update Danmuku class to support configurable visibility * refactor: Update Danmuku class to support configurable visibility * refactor: Update Danmuku class to support configurable visibility * refactor: Update Danmuku settings UI for better visibility and configurability * refactor: Update Danmuku settings UI for better visibility and configurability * refactor: Update Danmuku settings UI for better visibility and configurability * refactor: Update Danmuku settings UI for better visibility and configurability * refactor: Improve Danmuku settings UI for better visibility and configurability * add lock * refactor: Add lock and unlock methods to Danmuku settings * refactor: Update Danmuku settings UI for better visibility and configurability * refactor: Update Danmuku settings UI for better visibility and configurability * refactor: Update Danmuku settings UI for better visibility and configurability * refactor: Update Danmuku settings UI for better visibility and configurability * Update artplayer-plugin-danmuku.d.ts * refactor: Update Danmuku settings UI for better visibility and configurability * refactor: Update Danmuku settings UI for better visibility and configurability * refactor: Update Danmuku settings UI for better visibility and configurability * refactor: Update Danmuku settings UI for better visibility and configurability * refactor: Update Danmuku settings event listeners * refactor: Update Danmuku settings UI for better visibility and configurability * refactor: Update Danmuku settings UI for better visibility and configurability * refactor: Update Danmuku settings UI for better visibility and configurability * refactor: Update Danmuku settings UI for better visibility and configurability
88 lines
2.3 KiB
JavaScript
88 lines
2.3 KiB
JavaScript
import { isMobile } from './utils';
|
|
|
|
export default class Hotkey {
|
|
constructor(art) {
|
|
this.art = art;
|
|
this.keys = {};
|
|
|
|
if (art.option.hotkey && !isMobile) {
|
|
this.init();
|
|
}
|
|
}
|
|
|
|
init() {
|
|
const { proxy, constructor } = this.art;
|
|
|
|
this.add(27, () => {
|
|
if (this.art.fullscreenWeb) {
|
|
this.art.fullscreenWeb = false;
|
|
}
|
|
});
|
|
|
|
this.add(32, () => {
|
|
this.art.toggle();
|
|
});
|
|
|
|
this.add(37, () => {
|
|
this.art.backward = constructor.SEEK_STEP;
|
|
});
|
|
|
|
this.add(38, () => {
|
|
this.art.volume += constructor.VOLUME_STEP;
|
|
});
|
|
|
|
this.add(39, () => {
|
|
this.art.forward = constructor.SEEK_STEP;
|
|
});
|
|
|
|
this.add(40, () => {
|
|
this.art.volume -= constructor.VOLUME_STEP;
|
|
});
|
|
|
|
proxy(window, '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.keyCode];
|
|
if (events) {
|
|
event.preventDefault();
|
|
for (let index = 0; index < events.length; index++) {
|
|
events[index].call(this.art, event);
|
|
}
|
|
this.art.emit('hotkey', event);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
add(key, event) {
|
|
if (this.keys[key]) {
|
|
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);
|
|
}
|
|
}
|
|
return this;
|
|
}
|
|
}
|