您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
让我们给B站界面变得现代一些吧!
// ==UserScript== // @name bilbili界面美化 // @description 让我们给B站界面变得现代一些吧! // @namespace none // @version 1.1.7 // @author gogofishman // @license MIT // @match *://*.bilibili.com/video/* // @match *://*.bilibili.com/bangumi/* // @match *://*.bilibili.com/read/* // @run-at document-start // @grant GM_addStyle // @grant unsafeWindow // ==/UserScript== "use strict"; GM_addStyle(`.showAni { opacity: 1 !important; } body { overflow-x: hidden !important; } body.header-v3 { background-color: black !important; } .video-container-v1 { padding: 0 !important; margin: 0 !important; max-width: 2560px !important; flex-wrap: wrap !important; position: static !important; } .video-container-v1 .left-container { display: flex; flex-direction: column; width: 100%; background-color: white; z-index: 0 !important; } .bpx-player-container { box-shadow: 0 0 0 !important; -webkit-box-shadow: 0 0 0 !important; } #playerWrap { order: -1; background-color: black; height: calc(100vh - 108px - 64px) !important; min-height: 480px !important; z-index: 99 !important; display: flex !important; justify-content: center !important; box-shadow: 3px 2px 10px 0px rgba(0, 0, 0, .5); } #playerWrap #bilibili-player:not([class="mode-webscreen"]) { width: 100% !important; height: 100% !important; max-width: 2450px !important; } #bilibili-player-placeholder { display: none !important; } #bilibili-player-placeholder-bottom { display: none !important; } #bottomDiv { min-width: 1130px; padding: 0 20px; display: flex; justify-content: center; } /*白幕*/ #white_top{ width: 100%; height: 35vh; background: linear-gradient(to bottom, rgba(0, 0, 0, 0), rgb(255 255 255)); } #white_bottom{ width: 100%; flex: 1; background: white; } #white { position: absolute; display: flex; flex-direction: column; bottom: 0; width: 100%; height: calc(100% - 100vh); transition: height 1s; } .video-container-v1 .right-container { padding-left: 60px !important; margin-left: 0 !important; opacity: 0; transition: opacity 0.5s; } .up-info--left .up-avatar-wrap { width: 70px!important; height: 70px!important; } .up-info--left .bili-avatar { width: 100% !important; height: 100% !important; } /*去广告*/ .video-card-ad-small { display: none !important; } #slide_ad { display: none !important; } .mini-header { background-color: black !important; } .bili-header span { color: white !important; } .mini-header .right-entry .right-entry__outside .right-entry-icon { color: white !important; } .mini-header__arrow { color: white !important; } .v-popover.is-bottom-start span, .v-popover.is-bottom span { color: inherit !important; } /*搜索*/ .center-search__bar, .bili-header .right-entry { opacity: 0; transition: opacity 1.5s; } .center-search__bar > #nav-searchform { border-radius: 20px !important; border: 1px solid #525252 !important; transition: background-color .7s, border-top-color .7s, border-left-color .7s, border-right-color .7s !important; background: #1e1e1e !important; } .center-search__bar > #nav-searchform:hover { background: white !important; } .center-search__bar.is-focus > #nav-searchform { opacity: 1 !important; background: white !important; border-radius: 20px 20px 0 0 !important; border: 1px solid #ffffff !important; } .bili-header .search-panel { border-radius: 0 0 20px 20px !important; } .bili-header .center-search-container .center-search__bar .nav-search-btn { background: transparent !important; } .bili-header .center-search-container .center-search__bar .nav-search-btn:hover { background: transparent !important; } .bili-header .center-search-container .center-search__bar #nav-searchform.is-actived .nav-search-content, .bili-header .center-search-container .center-search__bar #nav-searchform.is-focus .nav-search-content { background: transparent !important; } .bili-header .center-search-container .center-search__bar .nav-search-content .nav-search-input:active { background: transparent !important; } .bili-header .center-search-container .center-search__bar .nav-search-content .nav-search-input:focus { background: transparent !important; } .bili-header .center-search-container .center-search__bar .nav-search-content .nav-search-input { font-size: 16px !important; } .nav-search-btn > svg { color: #525252 !important; } /*屏蔽不显示的*/ .download-entry { display: none !important; } a[href="//game.bilibili.com/platform"], a[href="//game.bilibili.com/"], a[href="//show.bilibili.com/platform/home.html?msource=pc_web"] { display: none !important; } div[class="vip-wrap"] { display: none !important; } .v-popover-wrap.left-loc-entry { display: none !important; } .video-title { font-size: 23px !important; color: black !important; font-weight: bold !important; } #leftDiv { width: 70vw; min-width: 650px; max-width: 1550px; } #viewbox_report, #arc_toolbar_report, .left-container-under-player { opacity: 0; transition: opacity 0.5s; } .video-ai-assistant { z-index: 1 !important; } /*去广告*/ .video-container-v1 #bannerAd { display: none !important; } .reply-header .reply-notice { display: none !important; } .bpx-player-sending-area:before { display: none !important; } .bpx-player-sending-area { position: absolute; display: flex; width: 100%; justify-content: center; opacity: 0; transition: opacity 0.5s; } .bpx-player-sending-bar { width: 50vw !important; background: rgba(0, 0, 0, 0.7) !important; box-shadow: 0 2px 8px 5px rgba(20, 20, 20, 0.5) !important; padding-left: 50px !important; padding-right: 80px !important; border-radius: 0 0 25px 25px !important; z-index: 9999 !important; } .bpx-player-video-info { color: rgb(230, 230, 230) !important; } #sendingHover { position: absolute; height: 25%; width: 100%; } #sendingHover:hover .bpx-player-sending-area { opacity: 1 !important; } /*变色*/ .bpx-player-video-inputbar { background: rgba(20, 20, 20, 0.9) !important; border: 1.5px solid rgba(251, 114, 153, 0.8) !important; border-radius: 10px !important; } .bpx-player-sending-bar .bpx-player-video-inputbar .bpx-player-dm-input { color: rgb(251, 114, 153) !important; } .bui-button .bui-area { background-color: rgba(251, 114, 153, 0.8) !important; } /*全屏状态下*/ .bpx-player-control-bottom-center .bpx-player-sending-bar { background: rgba(20, 20, 20, 0) !important; box-shadow: 0 0 0 0 !important; } .bpx-player-control-wrap { opacity: 0; transition: opacity 1.5s; } .bpx-player-top-issue{ display: none !important; } div[class="bpx-player-ctrl-btn bpx-player-ctrl-wide"][aria-label="宽屏"][role="button"]{ display: none !important; } .bpx-player-shadow-progress-area{ height: 3px !important; } .bpx-player-progress-schedule-current{ background-color: #fb7299; } div[id="biliMainHeader"][class="z-top-container"] { background-color: black !important; } .home-container{ display: flex; justify-content: center; background-color: black; } #__next .main-container { padding: 0 !important; margin: 0 !important; width: 100% !important; max-width: 2560px !important; flex-wrap: wrap !important; position: static !important; } #__next .main-container > #bilibili-player-wrap:not([class="video_playerFullScreen__VWP96"]) { order: -1; background-color: black; height: calc(100vh - 108px - 64px) !important; min-height: 480px !important; z-index: 99 !important; box-shadow: 3px 2px 10px 0px rgba(0, 0, 0, .5); padding-right: 0 !important; } #__next #bilibili-player-wrap > .video_playerInner__0_RRO { display: flex !important; justify-content: center; } .navTools_floatNavExp__fCiyO{ display: none !important; } .video_playerInner__0_RRO #bilibili-player:not([class="arzeus_wrap__KPR1i"]) { width: 100% !important; height: 100% !important; max-width: 2450px !important; } .main-container > #bottomDiv *{ box-sizing: unset; } .main-container .plp-r.sticky { padding-top: 108px !important; padding-left: 60px !important; left: 0 !important; display: none; opacity: 0; transition: opacity 0.5s; } .vipPaybar_container__GsBut { display: none; } .bpx-player-top-wrap { color: black !important; position: static !important; display: block !important; height: 108px !important; padding-top: 22px !important; } .bpx-player-top-mask, .bpx-player-top-follow { display: none; } .bpx-player-top-title { font-size: 23px !important; color: black !important; font-weight: bold !important; margin: 0 0 6px !important; line-height: 34px !important; } .bpx-player-top-wrap > .mediainfo_mediaDesc__0JJwL { font-size: 13px; color: #9499A0; line-height: 18px; } #player-title, .mediainfo_mediaDesc__0JJwL { opacity: 0; transition: opacity 0.5s ease-in-out; } .toolbar , .mediainfo_mediaInfo__Cpow4 ,#comment-module{ display: none; opacity: 0; transition: opacity 0.5s ease-in-out; } textarea[class="reply-box-textarea"]{ box-sizing: border-box !important; } #__next #sendingHover{ opacity: 0; transition: opacity 0.5s; } #__next #sendingHover:hover{ opacity: 1 !important; } .bpx-player-dm-setting-wrap{ bottom: auto !important; } .bpx-player-container[data-screen=full] .bpx-player-dm-setting-wrap, .bpx-player-container[data-screen=web] .bpx-player-dm-setting-wrap{ bottom: 63px !important; } /*全屏状态下*/ .squirtle-wide-screen .bpx-player-sending-bar { background: rgba(20, 20, 20, 0) !important; box-shadow: 0 0 0 0 !important; } .squirtle-controller.squirtle-pgc .squirtle-progress-timeline{ background-color: #fb7299; } .squirtle-controller .squirtle-progress-common.ease .squirtle-progress-bar{ height: 3px; } .video_playerNormal__YTwJq #bilibili-player{ max-width: 2450px; } `); //不加载iframe if (window === window.parent) { Print('加载脚本'); window.onload = () => { unsafeWindow.originSetSize = () => {}; unsafeWindow.setSize = () => {}; //等到第二次加载完app WaitUntilAction( () => document.getElementById('nav-searchform'), () => {}) .then(() => { run(); }); //进度条动画显示 WaitUntilAction( () => document.getElementsByClassName( 'bpx-player-control-wrap')[0], (e) => { (async function f() { await sleep(1000); e.classList.add('showAni'); //当点击网页全屏时隐藏导航栏 let button = document.querySelector( 'div[class="bpx-player-ctrl-btn bpx-player-ctrl-web"][aria-label="网页全屏"]' ); button.addEventListener('click', () => { let navigationBar = document.getElementById( 'biliMainHeader'); if (navigationBar.style.display !== 'none') { navigationBar.style.display = 'none'; } else { navigationBar.style.display = ''; } }); })(); }); } } async function run() { //判断当前站点 let url = document.querySelector('meta[property="og:url"]') .content; const regex = new RegExp("www.bilibili.com\\/(?<type>.*?)\\/"); let url_type = ''; if (regex.exec(url)) { url_type = regex.exec(url) .groups['type']; } //视频站点 if (url_type === 'video') { //改变播放器下方元素结构 let leftDiv = document.createElement("div"); leftDiv.id = "leftDiv"; leftDiv.appendChild(document.getElementById('viewbox_report')); leftDiv.appendChild(document.getElementById( 'arc_toolbar_report')); leftDiv.appendChild( document.getElementsByClassName( 'left-container-under-player')[0]); let bottomDiv = document.createElement("div"); bottomDiv.id = "bottomDiv"; bottomDiv.appendChild(leftDiv); let right = document.getElementsByClassName( 'right-container is-in-large-ab')[0]; bottomDiv.appendChild(right); let parentDiv = document.getElementsByClassName( 'left-container scroll-sticky')[0]; parentDiv.appendChild(bottomDiv); //创建弹幕栏激活区域 let sendingHover = document.createElement("div"); sendingHover.id = 'sendingHover'; sendingHover.appendChild( document.getElementsByClassName('bpx-player-sending-area')[ 0]); let vedio = document.querySelector( 'div[class="bpx-player-primary-area"][aria-label="哔哩哔哩播放器"]' ); vedio.appendChild(sendingHover); //动画显示效果 await sleep(400); right.classList.add('showAni'); document.getElementById('viewbox_report') .classList.add('showAni'); document.getElementById('arc_toolbar_report') .classList.add('showAni'); document.getElementsByClassName( 'left-container-under-player')[0].classList.add('showAni'); //添加白幕 let white = document.createElement("div"); white.id = "white"; white.style.height = document.body.scrollHeight - window .scrollY - window.innerHeight + 'px'; document.getElementById('bottomDiv') .appendChild(white); let white_top = document.createElement("div"); white_top.id = "white_top"; let white_bottom = document.createElement("div"); white_bottom.id = "white_bottom"; white.appendChild(white_top); white.appendChild(white_bottom); window.addEventListener('scroll', () => { white.style.height = document.body.scrollHeight - window .scrollY - window.innerHeight + 'px'; }); } //番剧站点 if (url_type === 'bangumi') { //改变播放器下方元素结构 let leftDiv = document.createElement("div"); leftDiv.id = "leftDiv"; leftDiv.appendChild( document.getElementsByClassName('bpx-player-top-wrap')[0]); leftDiv.appendChild(document.getElementsByClassName('toolbar')[ 0]); leftDiv.appendChild( document.getElementsByClassName( 'mediainfo_mediaInfo__Cpow4')[0]); leftDiv.appendChild(document.getElementById('comment-module')); let bottomDiv = document.createElement("div"); bottomDiv.id = "bottomDiv"; bottomDiv.appendChild(leftDiv); let right = document.getElementsByClassName( 'plp-r sticky')[0]; bottomDiv.appendChild(right); let parentDiv = document.getElementsByClassName( 'main-container')[0]; parentDiv.insertBefore(bottomDiv, document.getElementsByClassName('plp-l sticky')[0]); //移动简介到标题下方 let desc = document.getElementsByClassName( 'mediainfo_mediaDesc__0JJwL')[1]; document.getElementsByClassName('bpx-player-top-wrap')[0] .appendChild(desc); //创建弹幕栏激活区域 let sendingHover = document.createElement("div"); sendingHover.id = 'sendingHover'; sendingHover.appendChild( document.getElementsByClassName('bpx-player-sending-area')[ 0]); let vedio = document.querySelector( 'div[class="bpx-player-primary-area"][aria-label="哔哩哔哩播放器"]' ); vedio.appendChild(sendingHover); //改变部分样式 document.getElementsByClassName( 'bpx-player-top-title')[0].style.width = 'auto !important'; //动画显示效果 document.getElementsByClassName('toolbar')[0].style.display = 'flex'; document.getElementsByClassName( 'mediainfo_mediaInfo__Cpow4')[0].style.display = 'flex'; document.getElementById('comment-module') .style.display = 'block'; document.getElementsByClassName('plp-r sticky')[0].style .display = 'block'; await sleep(500); document.getElementsByClassName( 'mediainfo_mediaDesc__0JJwL')[0].classList.add('showAni'); document.getElementById('player-title') .classList.add('showAni'); document.getElementsByClassName('toolbar')[0].classList.add( 'showAni'); document.getElementsByClassName( 'mediainfo_mediaInfo__Cpow4')[0].classList.add('showAni'); document.getElementById('comment-module') .classList.add('showAni'); document.getElementsByClassName('plp-r sticky')[0].classList .add('showAni'); } //专栏站点 if (url_type === 'read') { //删除右键复制的后缀 let element = document.getElementById('article-content'); element.addEventListener("copy", function (e) { e.stopPropagation(); e.stopImmediatePropagation(); }, true); } //通用 document.getElementsByClassName('center-search__bar')[0].style .opacity = '1'; document.querySelector('ul[class="right-entry"]') .classList.add('showAni'); } function Print(text) { console.log(`[B站美化] - ${text}`); } function sleep(ms) { return new Promise((resolve) => setTimeout(resolve, ms)); } /** * 异步执行当某个元素出现时立马某个动作 * @param {function} element 返回指定元素的函数 * @param {function} action 执行动作,参数为element得到的元素,默认remove * @param {number} num action执行次数,默认1次,-1为不限定次数直到超时才停止 * @param {number} step 每次检查间隔时间 ms * @param {number} timeOut 超时时间 ms * @returns {Promise<void>} * @constructor */ async function WaitUntilAction(element, action = (element) => element .remove(), num = 1, step = 50, timeOut = 1000 * 10) { let count = 0; let _num = 0; let outCount = timeOut / step; try { while (count <= outCount) { count++; await sleep(step); let _c = element(); if (_c) { //执行动作 action(_c); if (_num < num) { break; } _num++; } } } catch (e) { console.log('WaitUntilAction错误:', e); } }