油猴脚本-Bilibili剧场模式仿Youtube

对比某个不存在的视频网站(YouTube),以及B站的播放模式,普通模式以及网页全屏之间都有一个“中间档”,油管的叫 剧场模式,B站的叫 宽屏模式

剧场模式
油猴脚本-Bilibili剧场模式仿Youtube_第1张图片

宽屏模式
油猴脚本-Bilibili剧场模式仿Youtube_第2张图片

  相比之下,还是更喜欢油管的剧场模式,主打一个沉浸感。应该还是可以实现的。

文章目录

  • 一、简单分析
  • 二、开整
  • 三、最终效果

一、简单分析

以宽屏模式为基础的话,看着实现起来还是很简单的:

  • 找到视频节点的标签
    • 将其宽度设置为 100% 页面宽度
  • 同样的找到顶部导航栏
    • 背景颜色设置为黑色
    • 字体、图标设置为白色

二、开整

先在浏览器开发者工具里通过调试,试着实现一下效果
✨中心思路就是:先把视屏调整到浏览器宽度(剧场模式核心),其它的小细节再慢慢调整。

  啊嘶,这个标签嵌套搞得很难受,某一层需要去掉padding,另一层需要修改对其方式,还有一层需要同步高度,布局方式跟想的不太一样,有点错综,节点顺序、样式可能需要互换调整,调整之后出现的各种意想不到的bug…

三、最终效果

  • 点击标题后可切换剧场模式、普通模式

油猴脚本-Bilibili剧场模式仿Youtube_第3张图片


代码:

// ==UserScript==
// @name         Bilibili 剧场播放
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Bilibili剧场模式
// @author       pxoxq
// @match        https://www.bilibili.com/video/**
// @icon         https://www.google.com/s2/favicons?sz=64&domain=bilibili.com
// @require      https://lib.sinaapp.com/js/jquery/3.1.0/jquery-3.1.0.min.js
// ==/UserScript==
const playerHeigh = 750
const widePlayerStyles = `
.bpx-player-ctrl-wide{
width:0px;}
#wide-box::-webkit-scrollbar{
display:none;
}
#wide-box{
scrollbar-width:0;
}
#wide-box #bilibili-player{
  width: 100vw !important;
}
#wide-box #playerWrap{
  order: -1;
  height: ${playerHeigh}px;
}
#wide-box #bilibili-player{
height:${playerHeigh}px;
}
#wide-box .left-container.scroll-sticky{
  display: flex;
  flex-direction: column;
}
#wide-box div.right-container.is-in-large-ab{
  margin-top: ${playerHeigh}px;
}
#wide-box #danmukuBox{margin-top: 0;}
#wide-box div.video-container-v1{
  padding: 0;
  justify-content: left;
}
#wide-box .left-container.scroll-sticky>div:not(#playerWrap){
 margin-left:100px;
}
#wide-box #biliMainHeader .bili-header__bar{
  background-color: #000;
}
#wide-box #biliMainHeader .bili-header__bar a.default-entry{
color:white;}
#wide-box #biliMainHeader .bili-header__bar li svg{color: white}
#wide-box .mini-header .right-entry .right-entry__outside .right-entry-text{color:white}
`
function injectStyle(styleStr, nodeId='pxo'){
    $('head').append(``)
}
function getRightBoxMarginTop(){
    return $('#danmukuBox').css('margin-top')
}
function genWidePlayerStyle(){
    const rightMarginTop = getRightBoxMarginTop()
    return widePlayerStyles.replace('@rightBoxMarginTop', rightMarginTop)
}
function wideModeInit(){
    injectStyle(widePlayerStyles)
    $('#viewbox_report').click(wideModeToggle)
}

function wideModeToggle(){
    $('.bpx-player-ctrl-wide').click()
    const mainBox = 'body'
    const boxId = $(mainBox).attr('id')
    let newId = ''
    if(!boxId){
        newId = 'wide-box'
    }
    $(mainBox).attr('id', newId)
}
function _init(){
    wideModeInit()
}
(function() {
    'use strict';
    _init()
})();

你可能感兴趣的:(油猴脚本,脚本,bilibili,javascript)