BILIBILI MoeUseHelper

BBMUH - 一键开关弹幕|播放暂停|调整倍速|开关全屏|能让你用bilibili更加愉快的助手

当前为 2020-08-12 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         BILIBILI MoeUseHelper
// @version      0.0.3
// @description  BBMUH - 一键开关弹幕|播放暂停|调整倍速|开关全屏|能让你用bilibili更加愉快的助手
// @author       萌萌哒丶九灬书
// @namespace    https://space.bilibili.com/1501743
// @license      GNU General Public License v3.0
// @create       2020-03-25
// @lastmodified 2020-08-10
// @note         0.0.3 更新: 1.新增了跳转播放的按键; 2.新增了直播间的快捷按键
// @note         感谢R君发布的基础版本,在他的基础上修改、增加了部分实现内容。
// @mainpage     https://greasyfork.org/zh-CN/scripts/408526-bilibili-moeusehelper
// @supportURL   https://greasyfork.org/zh-CN/scripts/408526-bilibili-moeusehelper/feedback
// @home-url     https://greasyfork.org/zh-CN/scripts/408526-bilibili-moeusehelper
// @homepageURL  https://greasyfork.org/zh-CN/scripts/408526-bilibili-moeusehelper
// @match        *://www.bilibili.com/*
// @match        *://live.bilibili.com/*
// @require      https://cdn.staticfile.org/jquery/1.12.4/jquery.min.js
// ==/UserScript==

// 小键盘8、2分别是增加音量、减少音量(B站自带)
// 小键盘4、6分别是后退、前进(B站自带)
var 播放暂停 = 101; //小键盘数字键5
var 开关弹幕 = 103; //小键盘数字键7
var 全屏模式 = 105; //小键盘数字键9
var 网页全屏 = 111; //小键盘“/”键
var 宽屏模式 = 106; //小键盘“*”键
var 增加倍速 = 107; //小键盘“+”键
var 减少倍速 = 109; //小键盘“-”键
var 清空倍速 = 97; ///小键盘数字键1
var 跳转播放 = 99; ///小键盘数字键3
// 以上每一个按键都可以自定义,可以按照自己的喜好自行对照键盘键位对应编码来修改
// 笔记本电脑或者是没有小键盘的同学,请参考下面的键盘编码表更改键位
// 对照修改的键盘编码表链接,复制右边的链接到地址栏打开https://jingyan.baidu.com/article/fedf073780e16335ac8977a4.html

//这里设置倍速
var video_speed = [0.1, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 4, 8, 16];

//jq重定义,避免冲突
var jq = jQuery.noConflict();

//判定当前url是否为直播间
var is_now_live_url = (window.location.host == "live.bilibili.com")? true : false;

function MUH_tips(str){
    var get_tips_div = jq("#tips_div");
    if(get_tips_div.val() == undefined){
        var tips_div = '<div id="tips_div" style="border-radius: 20px;'+
            'background:#000;'+
            'width: 140px;'+
            'height: 40px;'+
            'position:fixed;'+
            'left:50%; top:50%;'+
            'margin-left:-60px;'+
            'margin-top:-20px;'+
            'text-align:center;'+
            'line-height:40px;'+
            'font-size:20px;'+
            'color:#FFF;'+
            'opacity:0.8;'+
            'z-index:2147483647;">' + str + '</div>';
        if(is_now_live_url){
            jq(".bilibili-live-player.relative").append(tips_div);
        }else{
            jq(".bilibili-player-video").append(tips_div);
        }
        jq("#tips_div").animate({opacity:"0.8"},500).animate({opacity:"0"},250);
    }else{
        if(!get_tips_div.is(":animated")){
            get_tips_div.text(str);
            get_tips_div.css("opacity","0.8").animate({opacity:"0.8"},500).animate({opacity:"0"},250);
        }else{
            get_tips_div.stop(true, true);
            get_tips_div.text(str);
            get_tips_div.css("opacity","0.8").animate({opacity:"0.8"},500).animate({opacity:"0"},250);
        }
    }

}
var video_speed_control = jq(".bilibili-player-video video")[0];
var video_speed_num = 0;
for(var i = 0; i< video_speed.length; i++){
    if(video_speed[i] == 1.0){
        video_speed_num = i;
        break;
    }
}
function add_video_speed(){
    if(!is_now_live_url){
        if(++video_speed_num >= video_speed.length){
            video_speed_num = video_speed.length - 1;
        }
        video_speed_control.playbackRate = video_speed[video_speed_num];
        MUH_tips("倍速:" + video_speed[video_speed_num].toString());
    }
}
function sub_video_speed(){
    if(!is_now_live_url){
        if(--video_speed_num < 0){
            video_speed_num = 0;
        }
        video_speed_control.playbackRate = video_speed[video_speed_num];
        MUH_tips("倍速:" + video_speed[video_speed_num].toString());
    }
}
function reset_video_speed(){
    if(!is_now_live_url){
        video_speed_num = 0;
        for(var i = 0; i< video_speed.length; i++){
            if(video_speed[i] == 1.0){
                video_speed_num = i;
                break;
            }
        }
        video_speed_control.playbackRate = video_speed[video_speed_num];
        MUH_tips("倍速:" + video_speed[video_speed_num].toString());
    }
}
var wide_screen_flag = false;
var web_Full_screen_flag = false;
var Full_screen_flag = false;
function click_wide_screen(){
    if(!is_now_live_url){
        if(Full_screen_flag == true && wide_screen_flag == true){
            jq("button[data-text='进入全屏']").click(); //主站
            MUH_tips("宽屏模式");
            Full_screen_flag = false;
        }else if(web_Full_screen_flag == true && wide_screen_flag == true){
            jq("button[data-text='宽屏模式']").click(); //主站
            MUH_tips("宽屏模式");
            web_Full_screen_flag = false;
        }else if(wide_screen_flag){
            jq("button[data-text='宽屏模式']").click(); //主站
            MUH_tips("退出宽屏模式");
            wide_screen_flag = false;
        }else if(Full_screen_flag){
            jq("button[data-text='进入全屏']").click(); //主站
            setTimeout(function (){jq("button[data-text='宽屏模式']").click();}, 200); //主站
            MUH_tips("宽屏模式");
            wide_screen_flag = true;
            Full_screen_flag = false;
        }else{
            jq("button[data-text='宽屏模式']").click(); //主站
            MUH_tips("宽屏模式");
            wide_screen_flag = true;
            web_Full_screen_flag = false;
        }
    }
}
function click_web_Full_screen(){
    if(is_now_live_url){
        if(jq(".bilibili-live-player-video-controller-btn-item.bilibili-live-player-video-controller-web-fullscreen-btn").children("button").attr("data-title") == '退出网页全屏'){
            jq("button[data-title='退出网页全屏']").click(); //直播间
            MUH_tips("退出网页全屏");
        }else if(jq(".bilibili-live-player-video-controller-btn-item.bilibili-live-player-video-controller-web-fullscreen-btn").children("button").attr("data-title") == '网页全屏'){
            jq("button[data-title='网页全屏']").click(); //直播间
            MUH_tips("网页全屏");
        }
    }else{
        if(Full_screen_flag){
            jq("button[data-text='进入全屏']").click(); //主站
            setTimeout(function (){jq("button[data-text='网页全屏']").click();}, 200);//主站
            MUH_tips("网页全屏");
            Full_screen_flag = false;
            web_Full_screen_flag = true;
        }else if(web_Full_screen_flag){
            jq("button[data-text='网页全屏']").click(); //主站
            MUH_tips("退出网页全屏");
            web_Full_screen_flag = false;
        }else{
            jq("button[data-text='网页全屏']").click();//主站
            MUH_tips("网页全屏");
            web_Full_screen_flag = true;
        }
    }
}
function click_Full_screen(){
    if(is_now_live_url){
        if(jq(".bilibili-live-player-video-controller-btn-item.bilibili-live-player-video-controller-fullscreen-btn").children("button").attr("data-title") == '退出全屏'){
            jq("button[data-title='退出全屏']").click(); //直播间
            MUH_tips("退出全屏");
        }else if(jq(".bilibili-live-player-video-controller-btn-item.bilibili-live-player-video-controller-fullscreen-btn").children("button").attr("data-title") == '全屏模式'){
            jq("button[data-title='全屏模式']").click(); //直播间
            MUH_tips("全屏模式");
        }
    }else{
        if(Full_screen_flag){
            jq("button[data-text='进入全屏']").click(); //主站
            MUH_tips("退出全屏");
            Full_screen_flag = false;
        }else{
            jq("button[data-text='进入全屏']").click(); //主站
            MUH_tips("全屏模式");
            Full_screen_flag = true;
        }
    }

}
var Barrage_flag = (jq(".choose_danmaku").text() == "关闭弹幕") ? true : false;
function click_Barrage(){
    if(is_now_live_url){
        if(jq(".bilibili-live-player-video-controller-btn-item.bilibili-live-player-video-controller-hide-danmaku-btn").children("button").attr("data-title") == '显示弹幕'){
            jq("button[data-title='显示弹幕']").click(); //直播间
            MUH_tips("显示弹幕");
        }else if(jq(".bilibili-live-player-video-controller-btn-item.bilibili-live-player-video-controller-hide-danmaku-btn").children("button").attr("data-title") == '隐藏弹幕'){
            jq("button[data-title='隐藏弹幕']").click(); //直播间
            MUH_tips("隐藏弹幕");
        }
    }else{
        jq(".bui-switch-input").click(); //主站
        if(Barrage_flag){
            MUH_tips("关闭弹幕");
            Barrage_flag = false;
        }else{
            MUH_tips("显示弹幕");
            Barrage_flag = true;
        }
    }
}
var video_flag = false;
function stop_video(){
    if(is_now_live_url){
        if(jq(".bilibili-live-player-video-controller-btn-item.bilibili-live-player-video-controller-start-btn").children("button").attr("data-title") == '暂停'){
            jq("button[data-title='暂停']").click(); //直播间
            MUH_tips("暂停");
        }else if(jq(".bilibili-live-player-video-controller-btn-item.bilibili-live-player-video-controller-start-btn").children("button").attr("data-title") == '播放'){
            jq("button[data-title='播放']").click(); //直播间
            MUH_tips("播放");
        }
    }else{
        jq("button[aria-label='播放']").click(); //主站
        if(video_flag){
            MUH_tips("暂停");
            video_flag = false;
        }else{
            MUH_tips("播放");
            video_flag = true;
        }
    }
}
function jump_historical_view(){
    if(!is_now_live_url){
        jq(".bilibili-player-video-toast-item-jump").click(); //主站
        MUH_tips("已跳转播放");
    }
}
jq(document).ready(function() {
    jq(document).keydown(function(event){
        //调用键盘编码,按了键盘回调keydown里的function(event)函数,event就是你按的那个按键的code码
        switch(event.keyCode){
            case 播放暂停:
                stop_video();
                break;
            case 开关弹幕:
                click_Barrage();
                break;
            case 全屏模式:
                click_Full_screen();
                break;
            case 网页全屏:
                click_web_Full_screen();
                break;
            case 宽屏模式:
                click_wide_screen();
                break;
            case 增加倍速:
                add_video_speed();
                break;
            case 减少倍速:
                sub_video_speed();
                break;
            case 清空倍速:
                reset_video_speed();
                break;
            case 跳转播放:
                jump_historical_view();
                break;
        };
    });
});