Merge pull request #1138 from zd-x/xzd-merge

This commit is contained in:
DIYgod 2022-08-15 20:59:42 +01:00 committed by GitHub
commit 455af3385f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 120 additions and 100 deletions

View File

@ -12,22 +12,23 @@ class ContextMenu {
}
});
this.player.container.addEventListener('contextmenu', (e) => {
this.contextmenuHandler = (e) => {
const event = e || window.event;
event.preventDefault();
if (this.shown) {
this.hide();
return;
}
const event = e || window.event;
event.preventDefault();
const clientRect = this.player.container.getBoundingClientRect();
this.show(event.clientX - clientRect.left, event.clientY - clientRect.top);
this.player.template.mask.addEventListener('click', () => {
this.hide();
});
});
};
this.player.container.addEventListener('contextmenu', this.contextmenuHandler);
}
show(x, y) {
@ -62,6 +63,10 @@ class ContextMenu {
this.shown = false;
this.player.events.trigger('contextmenu_hide');
}
destroy() {
this.player.container.removeEventListener('contextmenu', this.contextmenuHandler);
}
}
export default ContextMenu;

View File

@ -13,18 +13,11 @@ class Controller {
this.autoHideTimer = 0;
if (!utils.isMobile) {
this.player.container.addEventListener('mousemove', () => {
this.setAutoHide();
});
this.player.container.addEventListener('click', () => {
this.setAutoHide();
});
this.player.on('play', () => {
this.setAutoHide();
});
this.player.on('pause', () => {
this.setAutoHide();
});
this.setAutoHideHandler = this.setAutoHide.bind(this);
this.player.container.addEventListener('mousemove', this.setAutoHideHandler);
this.player.container.addEventListener('click', this.setAutoHideHandler);
this.player.on('play', this.setAutoHideHandler);
this.player.on('pause', this.setAutoHideHandler);
}
this.initPlayButton();
@ -420,6 +413,10 @@ class Controller {
}
destroy() {
if (!utils.isMobile) {
this.player.container.removeEventListener('mousemove', this.setAutoHideHandler);
this.player.container.removeEventListener('click', this.setAutoHideHandler);
}
clearTimeout(this.autoHideTimer);
}
}

View File

@ -309,13 +309,7 @@ class Danmaku {
}
htmlEncode(str) {
return str
.replace(/&/g, '&')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&#x27;')
.replace(/\//g, '&#x2f;');
return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#x27;').replace(/\//g, '&#x2f;');
}
resize() {

View File

@ -12,7 +12,7 @@ class FullScreen {
utils.setScrollPosition(this.lastScrollPosition);
});
const fullscreenchange = () => {
this.fullscreenchange = () => {
this.player.resize();
if (this.isFullScreen('browser')) {
this.player.events.trigger('fullscreen');
@ -21,7 +21,7 @@ class FullScreen {
this.player.events.trigger('fullscreen_cancel');
}
};
const docfullscreenchange = () => {
this.docfullscreenchange = () => {
const fullEle = document.fullscreenElement || document.mozFullScreenElement || document.msFullscreenElement;
if (fullEle && fullEle !== this.player.container) {
return;
@ -35,13 +35,13 @@ class FullScreen {
}
};
if (/Firefox/.test(navigator.userAgent)) {
document.addEventListener('mozfullscreenchange', docfullscreenchange);
document.addEventListener('fullscreenchange', docfullscreenchange);
document.addEventListener('mozfullscreenchange', this.docfullscreenchange);
document.addEventListener('fullscreenchange', this.docfullscreenchange);
} else {
this.player.container.addEventListener('fullscreenchange', fullscreenchange);
this.player.container.addEventListener('webkitfullscreenchange', fullscreenchange);
document.addEventListener('msfullscreenchange', docfullscreenchange);
document.addEventListener('MSFullscreenChange', docfullscreenchange);
this.player.container.addEventListener('fullscreenchange', this.fullscreenchange);
this.player.container.addEventListener('webkitfullscreenchange', this.fullscreenchange);
document.addEventListener('msfullscreenchange', this.docfullscreenchange);
document.addEventListener('MSFullscreenChange', this.docfullscreenchange);
}
}
@ -122,6 +122,18 @@ class FullScreen {
this.request(type);
}
}
destroy() {
if (/Firefox/.test(navigator.userAgent)) {
document.removeEventListener('mozfullscreenchange', this.docfullscreenchange);
document.removeEventListener('fullscreenchange', this.docfullscreenchange);
} else {
this.player.container.removeEventListener('fullscreenchange', this.fullscreenchange);
this.player.container.removeEventListener('webkitfullscreenchange', this.fullscreenchange);
document.removeEventListener('msfullscreenchange', this.docfullscreenchange);
document.removeEventListener('MSFullscreenChange', this.docfullscreenchange);
}
}
}
export default FullScreen;

View File

@ -1,60 +1,74 @@
class HotKey {
constructor(player) {
if (player.options.hotkey) {
document.addEventListener('keydown', (e) => {
if (player.focus) {
const tag = document.activeElement.tagName.toUpperCase();
const editable = document.activeElement.getAttribute('contenteditable');
if (tag !== 'INPUT' && tag !== 'TEXTAREA' && editable !== '' && editable !== 'true') {
const event = e || window.event;
let percentage;
switch (event.keyCode) {
case 32:
event.preventDefault();
player.toggle();
break;
case 37:
event.preventDefault();
if (player.options.live) {
break;
}
player.seek(player.video.currentTime - 5);
player.controller.setAutoHide();
break;
case 39:
event.preventDefault();
if (player.options.live) {
break;
}
player.seek(player.video.currentTime + 5);
player.controller.setAutoHide();
break;
case 38:
event.preventDefault();
percentage = player.volume() + 0.1;
player.volume(percentage);
break;
case 40:
event.preventDefault();
percentage = player.volume() - 0.1;
player.volume(percentage);
break;
}
}
}
});
this.player = player;
this.doHotKeyHandler = this.doHotKey.bind(this);
this.cancelFullScreenHandler = this.cancelFullScreen.bind(this);
if (this.player.options.hotkey) {
document.addEventListener('keydown', this.doHotKeyHandler);
}
document.addEventListener('keydown', (e) => {
const event = e || window.event;
switch (event.keyCode) {
case 27:
if (player.fullScreen.isFullScreen('web')) {
player.fullScreen.cancel('web');
}
break;
document.addEventListener('keydown', this.cancelFullScreenHandler);
}
doHotKey(e) {
if (this.player.focus) {
const tag = document.activeElement.tagName.toUpperCase();
const editable = document.activeElement.getAttribute('contenteditable');
if (tag !== 'INPUT' && tag !== 'TEXTAREA' && editable !== '' && editable !== 'true') {
const event = e || window.event;
let percentage;
switch (event.keyCode) {
case 32:
event.preventDefault();
this.player.toggle();
break;
case 37:
event.preventDefault();
if (this.player.options.live) {
break;
}
this.player.seek(this.player.video.currentTime - 5);
this.player.controller.setAutoHide();
break;
case 39:
event.preventDefault();
if (this.player.options.live) {
break;
}
this.player.seek(this.player.video.currentTime + 5);
this.player.controller.setAutoHide();
break;
case 38:
event.preventDefault();
percentage = this.player.volume() + 0.1;
this.player.volume(percentage);
break;
case 40:
event.preventDefault();
percentage = this.player.volume() - 0.1;
this.player.volume(percentage);
break;
}
}
});
}
}
cancelFullScreen(e) {
const event = e || window.event;
switch (event.keyCode) {
case 27:
if (this.player.fullScreen.isFullScreen('web')) {
this.player.fullScreen.cancel('web');
}
break;
}
}
destroy() {
if (this.player.options.hotkey) {
document.removeEventListener('keydown', this.doHotKeyHandler);
}
document.removeEventListener('keydown', this.cancelFullScreenHandler);
}
}

View File

@ -118,21 +118,14 @@ class DPlayer {
this.setting = new Setting(this);
this.plugins = {};
document.addEventListener(
'click',
() => {
this.focus = false;
},
true
);
this.container.addEventListener(
'click',
() => {
this.focus = true;
},
true
);
this.docClickFun = () => {
this.focus = false;
};
this.containerClickFun = () => {
this.focus = true;
};
document.addEventListener('click', this.docClickFun, true);
this.container.addEventListener('click', this.containerClickFun, true);
this.paused = true;
@ -632,6 +625,11 @@ class DPlayer {
destroy() {
instances.splice(instances.indexOf(this), 1);
this.pause();
document.removeEventListener('click', this.docClickFun, true);
this.container.removeEventListener('click', this.containerClickFun, true);
this.fullScreen.destroy();
this.hotkey.destroy();
this.contextmenu.destroy();
this.controller.destroy();
this.timer.destroy();
this.video.src = '';

View File

@ -8,7 +8,7 @@ class Timer {
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function(callback) {
function (callback) {
window.setTimeout(callback, 1000 / 60);
})();