用于真学网站的视频播放器助手
// ==UserScript==
// @name 真学添加视频加速按钮
// @description 用于真学网站的视频播放器助手
// @namespace Violentmonkey Scripts
// @match http://bl.crtvup.com.cn/index.php
// @grant none
// @version 1.2.1
// ==/UserScript==
(function() {
'use strict';
var speedList = [1, 1.25, 1.5, 1.75, 2];
var vjs = null;
var currentVideo = null;
function getVideoElement(id) {
var node = null;
let videoListNode = document.getElementsByClassName("video_list");
Array.prototype.forEach.call(videoListNode, function(e) {
let data = e.getAttribute("data-name");
if (data == id) { node = e; }
});
return node;
}
function registerVideoList() {
let videoListNode = document.getElementsByClassName("video_list");
Array.prototype.forEach.call(videoListNode,function(e) {
e.onclick = function(){onObjSelect(this);};
});
// 尝试恢复上次播放的视频
tryRestore();
}
// 设置播放速度
function setSpeed(rate) {
vjs.tech_.setPlaybackRate(rate);
localStorage.setItem("rate", rate);
}
// 恢复上次设置的播放速度
function restoreSpeed() {
let rate = localStorage.getItem("rate");
if (rate != null) {
vjs.tech_.setPlaybackRate(rate);
}
}
function onObjSelect(obj) {
let data = obj.getAttribute("data-name");
localStorage.setItem("video_path", data);
currentVideo = data;
console.log(data);
}
function tryPlay(data) {
let ele = getVideoElement(data);
if (ele != null) {
ele.click();
}
}
// 尝试恢复上次播放的视频
function tryRestore() {
let data = localStorage.getItem("video_path");
if (data != null) {
tryPlay(data);
}
}
// 播放下一个视频
function playnext() {
getVideoElement(currentVideo).parentElement.nextElementSibling.childNodes[0].click();
}
window.onload=function() {
vjs = window.videojs.getPlayers("my-video")["my-video"];
// 添加视频加速按钮
let controlBar = document.getElementsByClassName("vjs-control-bar")[0];
speedList.forEach(function(e){
let btn=document.createElement("button");
let text=document.createTextNode(e+"x");
btn.appendChild(text);
controlBar.appendChild(btn);
btn.setAttribute("data", e);
btn.onclick=function() {
setSpeed(e);
};
});
// 删除右键菜单屏蔽
document.body.oncontextmenu = null;
document.getElementById("my-video").oncontextmenu = null;
document.getElementById("my-video_html5_api").oncontextmenu = null;
// 修改视频高度
document.getElementById("my-video").style.height = "calc(100vh - 60px)";
document.getElementById("right_list").style.height = "calc(100vh - 60px)";
// 注册列表改变事件
let listNode = document.getElementById("main-menu");
let config = { attributes: false, childList: true, subtree: true };
let observer = new MutationObserver(function(mutationsList) {
registerVideoList();
});
observer.observe(listNode, config);
registerVideoList();
// 注册播放完毕事件,用于连播
vjs.on("ended", playnext);
// 注册加载事件,用于调整播放速度
vjs.on("loadstart", restoreSpeed);
}
})();