// ==UserScript==
// @name 百度网盘自定义倍速播放
// @namespace http://tampermonkey.net/
// @version 4.0
// @description 第一次写的脚本,主要是考研看视频舒服一点,设置了一个可以自定义倍速的脚本,后面会逐渐完善和增加功能,欢迎反馈
// @author 枫影
// @match *://pan.baidu.com/play/video
// @grant none
// ==/UserScript==
(function() {
'use strict';
//生成倍速下拉菜单
function createSelect(id){
var s=document.createElement("SELECT");
s.setAttribute("id",id);
s.setAttribute("lay-verify","required");
var p0=document.createElement("OPTION");
var p1=document.createElement("OPTION");
var p2=document.createElement("OPTION");
var p3=document.createElement("OPTION");
var p4=document.createElement("OPTION");
var p5=document.createElement("OPTION");
p0.setAttribute("id","p0");
p1.setAttribute("id","p1");
p2.setAttribute("id","p2");
p3.setAttribute("id","p3");
p4.setAttribute("id","p4");
p5.setAttribute("id","p5");
p0.setAttribute("value","1");
p1.setAttribute("value","0.5");
p2.setAttribute("value","1.0");
p3.setAttribute("value","1.5");
p4.setAttribute("value","2");
p5.setAttribute("value","5");
p0.innerHTML="快捷倍速";
p1.innerHTML="0.5";
p2.innerHTML="1.0";
p3.innerHTML="1.5";
p4.innerHTML="2";
p5.innerHTML="5";
s.add(p0);
s.add(p1);
s.add(p2);
s.add(p3);
s.add(p4);
s.add(p5);
return s;
}
function createInput(inid,onid,selectid){
window.onload=function(){
let fast=readCookie("fast");
if(fast==null||fast==""||fast==NaN){
fast=1.00;
writeCookie("fast",fast,30);
}
else{
fast=parseFloat(fast).toFixed(2);
}
layui.use('layer', function(){
var layer = layui.layer;
layer.msg('倍速脚本加载完成!欢迎使用,历史倍速:'+fast);
});
}
//生成元素
let cr=document.createElement("BUTTON");
cr.setAttribute("class","layui-btn layui-btn-normal layui-btn-lg");
cr.setAttribute("id","create");
let sm=document.createElement("i");
sm.setAttribute("class","layui-icon layui-icon-face-smile-b");
sm.setAttribute("style","font-size: 30px; color: #ffffff;");
cr.setAttribute("alt","隐藏倍速工具箱");
cr.appendChild(sm);
let f=document.createElement("fieldset");
f.setAttribute("class","layui-elem-field");
f.setAttribute("id","box");
let le=document.createElement("legend");
le.innerHTML="视频倍速工具箱";
f.appendChild(le);
var d=document.createElement("FORM");
d.style.width="420px";
d.style.height="65px";
d.setAttribute("id","inform");
d.setAttribute("class","layui-form");
var init=document.createElement("INPUT");
init.setAttribute("type","text");
init.setAttribute("placeholder","请输入你想倍速的倍数");
init.setAttribute("id",inid);
init.setAttribute("class","layui-input");
var on=document.createElement("BUTTON");
var res=document.createElement("BUTTON");
on.innerHTML="确认";
on.setAttribute("id",onid);
on.setAttribute("class","layui-btn layui-btn-sm");
res.setAttribute("type","reset");
res.innerHTML="清空";
res.setAttribute("class","layui-btn layui-btn-normal layui-btn-sm");
var se=createSelect(selectid);
var pa=document.createElement("button");
let fast=readCookie("fast");
if(fast!=null&&fast!=""&&fast!=NaN){
fast=parseFloat(fast).toFixed(2);
}
else{
fast=1.0;
}
if(readCookie("past")){
delCookie("past");
}
writeCookie("past",fast,30);
pa.innerHTML="恢复记忆"+fast;
pa.setAttribute("id","past");
pa.setAttribute("class","layui-btn layui-btn-normal");
//引入layui框架
let js=document.createElement("script");
js.setAttribute("type","text/javascript");
js.setAttribute("src","https://www.layuicdn.com/layui-v2.5.6/layui.js");
let css=document.createElement("link");
css.setAttribute("type","text/css");
css.setAttribute("href","https://www.layuicdn.com/layui-v2.5.6/css/layui.css");
css.setAttribute("rel","stylesheet");
let head=document.getElementsByTagName("head")[0];
head.appendChild(js);
head.appendChild(css);
//设置位置
f.style.position="absolute";
f.style.left="0px";
f.style.top="50%";
init.style.position="absolute";
init.style.width="160px";
on.style.position="absolute";
res.style.position="absolute";
init.style.zIndex=999;
on.style.zIndex=999;
res.style.zIndex=999;
init.style.top="30%";
init.style.left="0px";
on.style.left="40%";
on.style.top="34%";
res.style.left="51%";
res.style.top="34%";
se.style.position="absolute";
se.style.top="63%";
se.style.left="1px";
se.style.zIndex=999;
cr.style.position="absolute";
cr.style.left="0px";
cr.style.top="42%";
pa.style.position="absolute";
pa.style.left="40%";
pa.style.top="63%";
//设置样式
f.style.width="400px";
f.style.height="125px";
//生成到界面上
document.body.appendChild(cr);
d.appendChild(init);
d.appendChild(on);
d.appendChild(res);
f.appendChild(d);
f.appendChild(se);
f.appendChild(pa);
controlBox(f,false);
document.body.appendChild(f);
}
//恢复记忆倍速
function Past(){
document.getElementById("past").onclick=function(){
let past=readCookie("past");
if(past!=null&&past!=""&&past!=NaN){
past=parseFloat(past).toFixed(2);
}
else{
past=1.0;
}
setFast(null,past);
}
}
//显示当前倍速
function outNow(fast){
layui.use('layer', function(){
var layer = layui.layer;
layer.msg("当前倍速:"+fast);
});
}
//控制工具箱的显示
var flag=0;
function createBox(){
let on=document.getElementById("create");
let f=document.getElementById("box");
on.onclick=function(){
//0表示此时是隐藏状态
if(flag==0){
layui.use('layer', function(){
var layer = layui.layer;
layer.msg("显示倍速工具箱");
});
let sm1=document.createElement("i");
sm1.setAttribute("class","layui-icon layui-icon-face-cry");
sm1.setAttribute("style","font-size: 30px; color: #ffffff;");
on.setAttribute("alt","隐藏倍速工具箱");
on.removeChild(on.firstChild);
on.appendChild(sm1);
controlBox(f,true);
flag=1;
}
else{
layui.use('layer', function(){
var layer = layui.layer;
layer.msg("隐藏倍速工具箱");
});
let sm2=document.createElement("i");
sm2.setAttribute("class","layui-icon layui-icon-face-smile-b");
sm2.setAttribute("style","font-size: 30px; color: #ffffff;");
on.setAttribute("alt","显示倍速工具箱");
on.removeChild(on.firstChild);
on.appendChild(sm2);
controlBox(f,false);
flag=0;
}
}
}
//动画显示隐藏指定id的fileld
function controlBox(fieldset,flag){
//true为渐显
if(flag==true){
fieldset.setAttribute("class","layui-elem-field layui-anim layui-anim-fadein");
}
//false为渐隐
else{
fieldset.setAttribute("class","layui-elem-field layui-anim layui-anim-fadeout");
}
}
//视频工具箱操作实现
function control(selectid){
let select=document.getElementById(selectid);
select.onchange=function(){
setFast(selectid,0.0);
}
}
//设置倍速
function setFast(id,num){
var fast;
if(num==0.0&&id!=null){
fast=document.getElementById(id).value;
}
else{
fast=num;
}
if(fast==0){
fast=1;
alert('你输入的倍数非法,已为你自动调整到原倍速!');
}
console.log("执行倍速:"+fast);
//将当前倍速写进cookie并且三十天不过期
if(readCookie("fast")){
delCookie("fast");
}
fast=parseFloat(fast);
fast=fast.toFixed(2);
writeCookie("fast",fast,30);
console.log("read cookie="+readCookie("fast"));
videojs.getPlayers("video-player").html5player.tech_.setPlaybackRate(fast);
outNow(fast);
}
function getInputFastAndSet(inid,btnid){
var on=document.getElementById(btnid);
on.onclick=function(){
setFast(inid,0.0);
}
}
//将倍速写进cookie
function writeCookie(c_name, value, expiredays){
var exdate = new Date();
exdate.setDate(exdate.getDate() + expiredays);
document.cookie = c_name + "=" + escape(value) + " ;expires=" + exdate.toGMTString() + "; path=/";
}
//将倍速从cookies里读出
function readCookie(cookie_name){
var allcookies = document.cookie;
//索引长度,开始索引的位置
var cookie_pos = allcookies.indexOf(cookie_name);
// 如果找到了索引,就代表cookie存在,否则不存在
if (cookie_pos != -1) {
// 把cookie_pos放在值的开始,只要给值加1即可
//计算取cookie值得开始索引,加的1为“=”
cookie_pos = cookie_pos + cookie_name.length + 1;
//计算取cookie值得结束索引
var cookie_end = allcookies.indexOf(";", cookie_pos);
if (cookie_end == -1) {
cookie_end = allcookies.length;
}
//得到想要的cookie的值
var value = unescape(allcookies.substring(cookie_pos, cookie_end));
}
return value;
}
//清除指定cookie
function delCookie(name) {
writeCookie(name, "", -1);
}
//监听键盘事件并更改倍速
function keyControl(){
document.onkeydown=function(event){
//如果同时按下alt+反向上倍速则加0.1
if(event.keyCode==87){
let fast=readCookie("fast");
console.log("倍速+");
if(fast){
console.log(fast);
fast=parseFloat(fast);
fast=fast+0.1;
setFast(null,fast);
}
}
else if(event.keyCode==83){
console.log("倍速-");
let fast=readCookie("fast");
if(fast){
console.log(fast);
fast=parseFloat(fast);
fast-=0.1;
setFast(null,fast);
}
}
}
}
createInput("in","btn","select");
getInputFastAndSet("in","btn");
control("select");
createBox();
Past();
keyControl();
})();