Greasy Fork

来自缓存

Greasy Fork is available in English.

b站滚轮调节音量、倍速优化

可在未全屏时,于视频底部使用滚轮调节音量以及倍速,每次调节音量幅度为5,可在代码中修改volumeChange变量来自定义调节幅度

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         b站滚轮调节音量、倍速优化
// @namespace    http://greakfork.org/
// @version      1.3.4
// @description  可在未全屏时,于视频底部使用滚轮调节音量以及倍速,每次调节音量幅度为5,可在代码中修改volumeChange变量来自定义调节幅度
// @author       xiao_luo
// @match        https://www.bilibili.com/video/*
// @match        https://www.bilibili.com/list/watchlater*
// @match        https://www.bilibili.com/bangumi/*
// @icon         https://i0.hdslb.com/bfs/static/jinkela/long/images/favicon.ico
// @grant        none
// @license GPL-3.0
// ==/UserScript==


(function() {
    'use strict';

    let volumeChange = 0.05
    function initThis(){
        let volume_btn = document.querySelector("div[aria-label='音量']")
        let video = document.querySelector('video')
        console.log("初始化完成")
        volume_btn.addEventListener("wheel",function(event){
            event.preventDefault()
            volume_btn.setAttribute("class", "bpx-player-ctrl-btn bpx-player-ctrl-volume bpx-state-show")
            if(event.wheelDelta > 0){
                video.volume = (video.volume+volumeChange)>1?1:(video.volume+volumeChange)
            }else if(event.wheelDelta < 0){
                video.volume = (video.volume-volumeChange)<0?0:(video.volume-volumeChange)
            }
        })


        let tempSpeed=0
        let originSpeed = 0
        let originSpeedText = document.querySelector('.bpx-player-ctrl-playbackrate-result').innerHTML
        let speed_btn = document.querySelector("div[aria-label='倍速']")
        console.log(originSpeedText)

        //对一倍速做特殊处理
        if('倍速' === originSpeedText){
            originSpeed = 1
        }else{
            originSpeed = parseFloat(originSpeedText)
        }

        let speed_choice = Array.from(document.querySelector('.bpx-player-ctrl-playbackrate-menu').children)
        speed_choice = speed_choice.sort(function (a, b) {
            const orderA = parseFloat(a.getAttribute('data-value'))
            const orderB = parseFloat(b.getAttribute('data-value'))
            return orderA - orderB;
        })

        for(let i=0; i<speed_choice.length; i++){
            if(parseFloat(speed_choice[i].getAttribute("data-value")) === originSpeed){
                tempSpeed = i
            }
        }

        speed_btn.addEventListener("wheel",event=>{
            event.preventDefault()

            speed_btn.setAttribute("class", "bpx-player-ctrl-btn bpx-player-ctrl-playbackrate bpx-state-show")
            let zeroIndex = document.querySelector('.be-settings') ? 1 : 0
            if(event.wheelDelta > 0){
                tempSpeed = speed_choice.length-1>tempSpeed+1 ? tempSpeed+1 : speed_choice.length-1
            }else if(event.wheelDelta < 0){
                tempSpeed = zeroIndex<tempSpeed-1 ? tempSpeed-1 : zeroIndex
            }
            speed_choice[tempSpeed].click()
        })


    }

    function waitElement(selector, callback) {
        const element = document.querySelector(selector);
        if (element) {
            setTimeout(() => {
                callback()
            }, 1000);
        } else {
            setTimeout(() => {
                waitElement(selector, callback);
            }, 100);
        }
    }

    waitElement("li[data-value='1']",initThis)


})();