Greasy Fork is available in English.

哔哩哔哩合集列表增加长度 bilibili

阿B,你视频右侧的合集列表长度敢不敢再短点?建议改成一屏只能看到一行 (添加功能:按g网页全屏)

// ==UserScript==
// @name         哔哩哔哩合集列表增加长度 bilibili
// @namespace    http://tampermonkey.net/
// @version      0.8
// @description  阿B,你视频右侧的合集列表长度敢不敢再短点?建议改成一屏只能看到一行 (添加功能:按g网页全屏)
// @author       JoshCai233
// @match        https://www.bilibili.com/video/*
// @icon         https://favicon.yandex.net/favicon/v2/http://www.bilibili.com/?size=32
// @require      https://cdn.jsdelivr.net/npm/jquery@3.2.1/dist/jquery.min.js
// @grant        none
// ==/UserScript==

// 获取播放列表
function getBilibiliPlayList(){
    return  $('.base-video-sections-v1 .video-sections-content-list,.right-container-inner .cur-list');
}
// 记录播放列表顶端位置
var bilibiliPlayListTop=0;
// 只能改一次宽度
var changeWidthLock=false;
// 取第一p的标题,如果标题刷新了则需要重新修改宽度(什么屎山代码)
var titleP1 = "";

// 改变播放列表长度
function enlargeBilibiliPlayList(){
    var bilibiliPlayList = getBilibiliPlayList();
    if(bilibiliPlayList.length>0 && bilibiliPlayList.css('height')!='fit-content'){
        bilibiliPlayListTop = bilibiliPlayList.offset().top;
        // 不删除广告时的高度
        // var bilibiliPlayListHeight = window.innerHeight - bilibiliPlayList.offset().top - 24;
        // 删除广告时的高度
        var bilibiliPlayListHeight = window.innerHeight - $('#danmukuBox').next().offset().top - bilibiliPlayList.prev().height() - 34;

        bilibiliPlayListHeight = Math.max(500, bilibiliPlayListHeight) + 'px';

        bilibiliPlayList.css('height','fit-content').css('max-height',bilibiliPlayListHeight);
        console.log("改变播放列表高度完成");

        // 增加宽度
        var widthInterval=setInterval(()=>{
            if(changeHeJiWidth()||changeFenPWidth()){
                console.log("播放列表宽度增加");
                clearInterval(widthInterval);
            }
        },500);
    }
}
//合集
function changeHeJiWidth(){

    var contentList=$('.video-sections-content-list');
    if(contentList.height()<10){
        return false;
    }
    contentList.css('margin-right','10px');
    var cardInfos=contentList.find('.video-episode-card__info');
    if(cardInfos.length){
        // // 改变合集宽度只改一次
        // if(cardInfos[0].firstChild.className.indexOf('video-episode-card__info-title')===-1){
        //     return true;
        // }
        if(changeWidthLock){
            // 如果标题的时长通过刷新等方式改回去了,则需要忽略锁,重新将时长加回去
            if ( titleP1 !== cardInfos[0].firstChild.lastChild.textContent){
                return true;
            }
        }else{
            // 上锁
            changeWidthLock = true;
        }

        titleP1 = cardInfos[0].firstChild.lastChild.textContent;

        // 文字排版
        cardInfos.each(function(index,item){
            //     item.insertBefore(item.lastChild,item.firstChild);
            //     item.firstChild.style.marginRight='0.8em';
            //     item.style.justifyContent='left';

            // 把时长和标题放一起,如果单独拿过去会出bug
            if (item.firstChild.lastChild.nodeType === 3){
                var videoLength = item.lastChild.innerText.trim();
                if(videoLength.length > 3 && videoLength.split(":")[0].length<2){
                    videoLength = "0" + videoLength;
                }
                item.firstChild.lastChild.textContent = ' [' + videoLength +'] '+ item.firstChild.lastChild.textContent;
            }
            item.style.justifyContent='left';
        });

        // 启用滚动
        contentList.css('overflow','scroll');
        $('.video-sections-item,.video-episode-card__info-title').css('width','100%').css('min-width', 'fit-content');
        //滚动条样式
        const styleTag = document.createElement('style');
        styleTag.innerHTML =".video-sections-content-list::-webkit-scrollbar{height:4px;} " +
            ".video-episode-card__info-title.video-episode-card__info-title_indent{padding-left:0.55em;}" +
            ".video-section-title {border-bottom: 1px solid #e3e5e7;}";

        // 将样式标签添加到head
        document.head.appendChild(styleTag);

        return true;
    }
    return false;
}
//分p
function changeFenPWidth(){
    // return true;
    var contentList=$('.cur-list');
    var cardInfos=contentList.find('ul li');
    // 分p先加载长度
    if(contentList.height()<10 ||cardInfos[0].children.length===0){
        return false;
    }
    contentList.css('margin-right','10px');
    if(cardInfos.length){
        // 改变分p宽度只改一次
        if($(cardInfos[0]).find('.link-content').index()===1){
            return true;
        }
        // 文字排版
        cardInfos.each(function(index,topItem){
            var item=$(topItem).find('.clickitem')[0];
            item.insertBefore(item.lastChild,item.firstChild);
            item.firstChild.style.marginRight='0.8em';
            item.style.justifyContent='left';
        });
        // 启用滚动
        contentList.css('overflow','scroll');
        cardInfos.css('width','100%').css('min-width', 'fit-content');
        //滚动条样式
        const styleTag = document.createElement('style');
        styleTag.innerHTML =".cur-list::-webkit-scrollbar{height:4px;}";
        // 将样式标签添加到头部
        document.head.appendChild(styleTag);

        return true;
    }
    return false;
}


(function() {
    'use strict';
    $(document).ready(function () {
        /////////// 按下g的时候能点击网页全屏
        document.addEventListener('keydown', function(event) {
            console.log(event.key);
            if (event.key === 'g'||event.key === 'G') {
                var buttonElem =$(".bpx-player-ctrl-btn-icon.bpx-player-ctrl-web-enter")[0]; // 将 'myButton' 替换为实际按钮的 ID
                buttonElem.click();
            }
        });

        // 取消下滑右边栏的常态显示,方便摸鱼
        $(".video-container-v1 .right-container .right-container-inner").css("padding-bottom", window.innerHeight + "px");



        // 扩大一次播放列表长度
        enlargeBilibiliPlayList();
        var list = getBilibiliPlayList();

        // 检测高度变化, 如果变短则再次增加列表长度
        var callback = (mutations) => {
            for(var i=0;i<mutations.length;i++){
                console.log("视频列表高度发生变化");
                enlargeBilibiliPlayList();
            }
        }
        var config = {attributes:true,attributeFilter:['style'],attributeOldValue:true};
        new MutationObserver(callback).observe(list[0], config);


        // 检测是否删除了广告, 如果删除广告则变化列表长度
        config = { attributes: false, childList: true, subtree: true };
        callback = (mutationsList, observer) => {
            var bilibiliPlayList = getBilibiliPlayList();
            if(bilibiliPlayListTop>bilibiliPlayList.offset().top){
                bilibiliPlayListTop=bilibiliPlayList.offset().top;
                bilibiliPlayList.css('height','');
            }
        };
        new MutationObserver(callback).observe($('.right-container')[0], config);
    });
})();