// ==UserScript== // @name BILIBILI MoeUseHelper // @version 0.0.6 // @description BBMUH - 一键开关弹幕|播放暂停|调整倍速|开关全屏|能让你用bilibili更加愉快的助手 // @author 萌萌哒丶九灬书 // @namespace https://space.bilibili.com/1501743 // @license GNU General Public License v3.0 // @create 2020-03-25 // @lastmodified 2020-08-14 // @note 0.0.6 更新: 1.修复了直播间无法使用的bug; // @note 0.0.5 更新: 1.修复了开关弹幕、播放暂停时偶现的tips显示bug; 2.新增了缩放填充、拉伸填充。 // @note 0.0.4 更新: 1.修复了看番时无法使用倍速的问题。 // @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 // @downloadURL none // ==/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 var 缩放填充 = 96; ///小键盘数字键0 // 当你的显示屏是21:9,up主却按16:9上传了21:9的视频时,用这个 var 拉伸填充 = 110; //小键盘“.”键 // 当你的显示屏是16:9,up主却上传了18:9的视频时,用这个 // 不清楚填充效果可以去《星际迷航:暗黑无界》这部片子测试下 // 链接:https://www.bilibili.com/bangumi/play/ss34021/ // ***************************************************************************** // * 上方每一个按键都能自定义,可以按照自己的喜好自行对照键盘键位对应编码来修改 // * 笔记本电脑或者是没有小键盘的同学,请参考下面的键盘编码表更改键位 // * 对照修改的键盘编码表链接,复制下方的链接到地址栏打开 // * 链接: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]; // ********************************************* // * 上方的倍速列表也可以自定义设置 // * 如果列表中没有“1.0”或“1” // * 会导致按下重置按键后重置到第一个值“0.1” // ********************************************* //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 = '
' + str + '
'; 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_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; } jq(".bilibili-player-video video")[0].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; } jq(".bilibili-player-video video")[0].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; } } jq(".bilibili-player-video video")[0].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; } } } 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{ if(jq("input.bui-switch-input").prop('checked')){ MUH_tips("关闭弹幕"); }else{ MUH_tips("显示弹幕"); } jq(".bilibili-player-video-danmaku-switch.bui.bui-switch").children(".bui-switch-input").click(); //主站 } } 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{ if(jq(".bilibili-player-iconfont.bilibili-player-iconfont-start").css("display") == "none"){ MUH_tips("暂停"); }else{ MUH_tips("播放"); } jq("button[aria-label='播放']").click(); //主站 } } function jump_historical_view(){ if(!is_now_live_url){ jq(".bilibili-player-video-toast-item-jump").click(); //主站 MUH_tips("已跳转播放"); } } function fill_screen_width(){ //强制横向填充屏幕(等比缩放填充) var screen_Width = document.documentElement.clientWidth; var fill_screen_width_style = ""; jq(".bilibili-player-video").append(fill_screen_width_style); jq(".bilibili-player-video").removeClass("video-size-default"); jq(".bilibili-player-video").removeClass("video-size-height-fill"); jq(".bilibili-player-video").addClass("video-size-width-fill"); jq(".bilibili-player-video video").css("width", screen_Width); jq(".bilibili-player-video video").css("padding","0px"); } function fill_screen_height(){ //强制纵向填充屏幕(拉伸缩放填充) var screen_height = document.documentElement.clientHeight; var fill_screen_height_style = ""; jq(".bilibili-player-video").append(fill_screen_height_style); jq(".bilibili-player-video").removeClass("video-size-default"); jq(".bilibili-player-video").removeClass("video-size-width-fill"); jq(".bilibili-player-video").addClass("video-size-height-fill"); } jq(document).ready(function() { jq(document).keydown(function(event){ //调用键盘编码,按了键盘回调keydown里的function(event)函数,event就是你按的那个按键的code码 if(jq(".bilibili-player-video-panel-row").text() == "播放器初始化...[完成]加载用户配置...[完成]" || is_now_live_url){ 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; case 缩放填充: fill_screen_width(); break; case 拉伸填充: fill_screen_height(); break; }; }; }); });