您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Replaces the volume slider with a version that offers more control at lower volumes
- // ==UserScript==
- // @name Better Youtube Volume
- // @version 1.0.4
- // @namespace https://fryzen.net/
- // @author HarbAlarm
- // @description Replaces the volume slider with a version that offers more control at lower volumes
- // @description:de Ersetzt den Lautstärkeregler durch eine Version, die mehr Kontrolle bei geringerer Lautstärke bietet
- // @license The Unlicense
- // @tag QOL
- // @match https://www.youtube.com/watch*
- // @icon https://www.google.com/s2/favicons?sz=64&domain=youtube.com
- // @grant unsafeWindow
- // @run-at document-idle
- // ==/UserScript==
- //let slider = '<input id="harbVol" type="range" onInput="harbVolume(event.target.value)"/>';
- let volSlider, volPanel, volControlHover, video
- let slider = document.createElement('input');
- function init() {
- slider.id = 'harbVol';
- slider.type = 'range';
- slider.style.position = 'relative';
- //slider.style.top = '10px';
- //slider.style.right = '300px';
- slider.style.zIndex = '99999';
- slider.style.width = '80px';
- slider.style.marginTop = '15px';
- slider.oninput = function(e) { harbVolume(e.target.value) }
- if (document.querySelectorAll('.ytp-volume-slider')) {
- volSlider = document.querySelector('.ytp-volume-slider')
- volSlider.style.display = 'none'
- }
- if (document.querySelectorAll('.ytp-volume-panel')) {
- volPanel = document.querySelector('.ytp-volume-panel')
- volPanel.style.width = 'auto'
- //volPanel.style.overflow = 'hidden'
- }
- if (document.querySelectorAll('.ytp-volume-control-hover')) {
- volControlHover = document.querySelector('.ytp-volume-control-hover')
- //volControlHover.style.width = 'auto'
- volControlHover.style.overflow = 'hidden'
- }
- update()
- }
- function update() {
- document.querySelector('#title').appendChild(slider)
- }
- function harbVolume(slider) {
- if (!video) { video = document.querySelector('video') }
- video.volume = bezier(0, 0, .25, 1, slider / 100);
- }
- function bezier(p1, p2, p3, p4, t) {
- // https://javascript.info/bezier-curve
- return (1 - t) * (1 - t) * (1 - t) * p1 +
- 3 * (1 - t) * (1 - t) * t * p2 +
- 3 * (1 - t) * t*t * p3 + t*t*t * p4
- }
- const mo = new MutationObserver(() => {
- mo.disconnect();
- if (!document.contains(slider)) {
- update()
- }
- observe();
- });
- function observe() {
- mo.observe(document.body, {childList: true, subtree: true});
- }
- (function() {
- document.querySelector(".ytp-volume-panel").appendChild(slider)
- // document.addEventListener("DOMContentLoaded", function(event){
- init()
- observe();
- // })
- })();