您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Add Speed Slider to Youtube Player Settings
当前为
// ==UserScript== // @name Youtube Player Speed Slider // @namespace youtube_player_speed_slider // @version 0.1.2 // @description Add Speed Slider to Youtube Player Settings // @author Łukasz and Witold // @match https://*.youtube.com/* // @grant none // ==/UserScript== (function() { 'use strict'; var YT_F = {}; YT_F.option = { menu:null, speedMenu: null, label:null, menuClass : "ytp-menuitem", labelText : 'Speed', timeoutBuild: 500, timeoutRemove: 2000, timeoutTry: 1000, }; YT_F.new = function(tag, option){ var element = document.createElement(tag); for(var param in option){ element[param] = option[param]; } return element; }; YT_F.get = function(tselector, all){ all = all || false; var type = tselector.substring(0,1); var selector = tselector.substring(1); if(type == "#"){ return document.getElementById(selector); } else if(type == "."){ var elements = document.getElementsByClassName(selector); if(all){ return elements; } else{ return elements.length ? elements[0] : null; } } }; YT_F.build = function() { YT_F.option.menu = YT_F.get('.ytp-panel-menu'); if(YT_F.option.menu !== null){ YT_F.option.menu.appendChild(YT_F.buildSpeedMenu()); setTimeout(YT_F.removeDefaultSpeedMenu, YT_F.option.timeoutRemove); setTimeout(YT_F.annotationsSwitchOff, YT_F.option.timeoutRemove); } else{ setTimeout(YT_F.build, YT_F.option.timeoutBuild); } }; YT_F.buildSpeedMenu = function(){ YT_F.option.speedMenu = YT_F.new('div', {'className':'ytp-menuitem'}); YT_F.option.speedMenu.label = YT_F.new('div', {'className':'ytp-menuitem-label', 'innerHTML':'<b>Speed: 1</b>'}); var right = YT_F.new('div', {'className':'ytp-menuitem-content'}); var range = YT_F.new('input', {'className':'', 'type':'range', 'min':0.5, 'max':4, 'step':0.1, 'value':1}); document.addEventListener('change', YT_F.onchange); document.addEventListener('input', YT_F.updateLabel); right.appendChild(range); YT_F.option.speedMenu.appendChild(YT_F.option.speedMenu.label); YT_F.option.speedMenu.appendChild(right); return YT_F.option.speedMenu; }; YT_F.updateLabel = function(event){ YT_F.option.speedMenu.label.innerHTML = YT_F.option.labelText + ": " + event.target.value; }; YT_F.onchange = function(event){ YT_F.updatePlayerSpeed(event.target.value); }; YT_F.updatePlayerSpeed= function(value){ YT_F.get('.html5-main-video').playbackRate = value; }; YT_F.annotationsSwitchOff = function(){ var settings_button = YT_F.get(".ytp-settings-button"); var all_labels = YT_F.get(".ytp-menuitem-label", true); settings_button.click(); settings_button.click(); for (var i = 0; i < all_labels.length; i++) { if (all_labels[i].innerHTML == "Annotations" || all_labels[i].innerHTML == "Adnotacje"){ if(all_labels[i].parentNode.getAttribute("aria-checked") == "true"){ (all_labels[i].parentNode.click()); } return true; } } return false; }; YT_F.tryAnnotationsSwitchOff = function(){ if(!YT_F.annotationsSwitchOff()){ setTimeout(YT_F.tryAnnotationsSwitchOff, YT_F.option.timeoutTry); } }; YT_F.removeDefaultSpeedMenu = function(){ var settings_button = YT_F.get(".ytp-settings-button"); var all_labels = YT_F.get(".ytp-menuitem-label", true); settings_button.click(); settings_button.click(); for (var i = 0; i < all_labels.length; i++) { if (all_labels[i].innerHTML == "Speed" || all_labels[i].innerHTML == "Szybkość"){ YT_F.option.labelText = all_labels[i].innerHTML; all_labels[i].parentNode.style.display = 'none'; } } }; YT_F.build(); document.addEventListener("spfdone", function(){setTimeout(YT_F.tryAnnotationsSwitchOff, YT_F.option.timeoutRemove);}); })();