🏠 Home 

多倍速调节+倍速同步+回车全屏+播完退出全屏

按自己的使用习惯用ChatGPT写的脚本,我自己测试过了没啥问题,分享给有同样习惯的小伙伴,以后应该不怎么改了,有自己需求的可以自行更改。


Installer dette script?
// ==UserScript==
// @name         多倍速调节+倍速同步+回车全屏+播完退出全屏
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  按自己的使用习惯用ChatGPT写的脚本,我自己测试过了没啥问题,分享给有同样习惯的小伙伴,以后应该不怎么改了,有自己需求的可以自行更改。
// @author       ChatGPT
// @match        *://www.bilibili.com/video/*
// @grant        none
// ==/UserScript==
(function() {
'use strict';
// 创建音量提示的div元素
var volumeHint = document.createElement('div');
volumeHint.classList.add('bpx-player-volume-hint');
volumeHint.style.display = 'none';  // 初始隐藏
// 创建音量提示文本元素
var volumeText = document.createElement('span');
volumeText.classList.add('bpx-player-volume-hint-text');
volumeHint.appendChild(volumeText);
// 将音量提示添加到B站播放器容器中
var playerContainer = document.querySelector("#bilibili-player > div > div > div.bpx-player-primary-area > div.bpx-player-video-area");
playerContainer.appendChild(volumeHint);
const BILIBILI_PLAYBACKRATE = "bilibili_playbackRate";
// 监听视频播放事件
const videoElement = document.querySelector('video');
if (!videoElement) return;
// 退出全屏函数
function exitFullscreen() {
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.webkitExitFullscreen) {
document.webkitExitFullscreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.msExitFullscreen) {
document.msExitFullscreen();
}
}
function triggerFullScreenButton() {
const fullScreenButton = document.querySelector('.bpx-player-ctrl-btn.bpx-player-ctrl-full');
if (fullScreenButton) {
fullScreenButton.click();
}
}
// 监听回车键事件
document.addEventListener('keydown', function(event) {
if (event.key === 'Enter') {
triggerFullScreenButton();
}else if (event.key === 'PageUp' || event.key === '+') {
setVideoPlaybackRate(getSavedPlaybackRate() + 0.5,true);
event.preventDefault();
} else if (event.key === 'PageDown' || event.key === '-') {
setVideoPlaybackRate(getSavedPlaybackRate() - 0.5,true);
event.preventDefault();
}
});
videoElement.addEventListener('ended', () => {
// 判断当前是否处于全屏状态
if (document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement) {
// 连播状态是否开启,开启状态则不退出
const switchButtonSpan = document.querySelector('.switch-button:not(.on)');
if (switchButtonSpan) {
// 退出全屏
exitFullscreen();
}
}
});
// 设置视频倍速
const observer = new MutationObserver(() => {
const menu = document.querySelector('.bpx-player-ctrl-playbackrate-menu');
if (!menu) {
return;
}
observer.disconnect();
const speeds = [4.0, 3.5, 3.0, 2.5, 2.0, 1.75, 1.5, 1.25, 1.0, 0.75, 0.5];
const items = menu.querySelectorAll('.bpx-player-ctrl-playbackrate-menu-item');
items.forEach(item => item.remove());
speeds.forEach(speed => {
const item = document.createElement('li');
item.classList.add('bpx-player-ctrl-playbackrate-menu-item');
item.setAttribute('data-value', speed.toString());
item.textContent = speed.toString();
menu.appendChild(item);
// 添加点击事件处理程序
item.addEventListener('click', () => {
const selectedSpeed = parseFloat(item.getAttribute('data-value'));
// 将选中的倍速值保存到localStorage
localStorage.setItem(BILIBILI_PLAYBACKRATE, selectedSpeed.toString());
// 移除其他项的选中状态,只在点击的项上添加选中状态
items.forEach(otherItem => otherItem.classList.remove('bpx-state-active'));
item.classList.add('bpx-state-active');
setVideoPlaybackRate(selectedSpeed); // 设置视频倍速
});
});
const defaultSpeed = 1.0;
const savedSpeed = getSavedPlaybackRate();
if (savedSpeed) {
setVideoPlaybackRate(savedSpeed);
const activeItem = menu.querySelector(`.bpx-player-ctrl-playbackrate-menu-item[data-value="${savedSpeed}"]`);
if (activeItem) {
activeItem.classList.add('bpx-state-active');
}
console.log('设置为上次设置的倍速: ', savedSpeed);
} else {
setVideoPlaybackRate(defaultSpeed);
const activeItem = menu.querySelector(`.bpx-player-ctrl-playbackrate-menu-item[data-value="${defaultSpeed}"]`);
if (activeItem) {
activeItem.classList.add('bpx-state-active');
}
console.log('缓存未找到上次设置的倍速,使用默认倍速: ', defaultSpeed);
}
});
observer.observe(document.documentElement, {
childList: true,
subtree: true
});
// 读取localStorage中的倍速值
function getSavedPlaybackRate() {
const savedSpeed = localStorage.getItem(BILIBILI_PLAYBACKRATE);
if (savedSpeed) {
return parseFloat(savedSpeed);
}
return null;
}
function formatNumber(number) {
// 判断是否为整数
if (number % 1 === 0) {
return number + '.0';
} else {
return number.toString();
}
}
// 定义一个函数来设置视频倍速
function setVideoPlaybackRate(rate,isHint) {
const menu = document.querySelector('.bpx-player-ctrl-playbackrate-menu');
if (!menu) return;
const menuItem = menu.querySelector(`.bpx-player-ctrl-playbackrate-menu-item[data-value="${rate}"]`);
if (menuItem) {
menuItem.click(); // Simulate clicking the menu item
}
if(isHint){
// 在事件处理程序中设置音量提示文本
var customText = '倍速 ' + formatNumber(getSavedPlaybackRate());  // 替换为您想要的文本
volumeText.textContent = customText;
// 显示音量提示
volumeHint.style.display = 'block';
// 设置1秒后自动隐藏音量提示
setTimeout(function() {
volumeHint.style.display = 'none';
}, 500); // 1秒后隐藏
}
}
})();