网页中有视频时,右下角显示倍速操作界面
目前為
// ==UserScript==
// @name 视频加速器
// @namespace http://tampermonkey.net/
// @version 1.0
// @description 网页中有视频时,右下角显示倍速操作界面
// @license MIT
// @author 失辛向南
// @match *://*/*
// @grant none
// ==/UserScript==
(function () {
'use strict';
let speedControlContainer;
let speedSelect;
function createSpeedControlUI() {
speedControlContainer = document.createElement('div');
speedControlContainer.style.position = 'fixed';
speedControlContainer.style.bottom = '20px';
speedControlContainer.style.right = '20px';
speedControlContainer.style.backgroundColor = 'rgba(0, 0, 0, 0.7)';
speedControlContainer.style.padding = '10px';
speedControlContainer.style.borderRadius = '5px';
speedControlContainer.style.color = 'white';
speedControlContainer.style.zIndex = '9999';
const speedLabel = document.createElement('span');
speedLabel.textContent = 'Speed: ';
speedControlContainer.appendChild(speedLabel);
speedSelect = document.createElement('select');
for (let i = 0.25; i <= 5; i += 0.25) {
const option = document.createElement('option');
option.value = i;
option.textContent = i + 'x';
speedSelect.appendChild(option);
}
speedSelect.value = '1';
speedControlContainer.appendChild(speedSelect);
document.body.appendChild(speedControlContainer);
speedSelect.addEventListener('change', updateVideoSpeeds);
}
function updateVideoSpeeds() {
const videos = document.getElementsByTagName('video');
for (let video of videos) {
video.playbackRate = parseFloat(speedSelect.value);
}
}
function checkForVideos() {
const videos = document.getElementsByTagName('video');
if (videos.length > 0) {
if (!speedControlContainer) {
createSpeedControlUI();
}
updateVideoSpeeds();
} else {
if (speedControlContainer) {
speedControlContainer.remove();
speedControlContainer = null;
speedSelect = null;
}
}
}
function isVideoPage() {
// 更严格的视频网页判断逻辑
const videoElements = document.getElementsByTagName('video');
const videoTagsInHTML = document.documentElement.innerHTML.includes('<video');
return videoElements.length > 0 || videoTagsInHTML;
}
window.addEventListener('load', () => {
if (isVideoPage()) {
checkForVideos();
}
});
window.addEventListener('DOMContentLoaded', () => {
if (isVideoPage()) {
checkForVideos();
}
});
})();