YouTube Playback Speed Buttons

Adds playback speed buttons to youtube player control bar.

目前為 2023-09-22 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name YouTube Playback Speed Buttons
  3. // @description Adds playback speed buttons to youtube player control bar.
  4. // @version 0.1.1
  5. // @license MIT
  6. // @author bowencool
  7. // @match https://www.youtube.com/watch*
  8. // @namespace https://www.youtube.com/
  9. // @author bowencool
  10. // @license MIT
  11. // @supportURL https://github.com/bowencool/Tampermonkey-Scripts/issues
  12. // @icon https://www.google.com/s2/favicons?sz=64&domain=youtube.com
  13. // @run-at document-end
  14. // ==/UserScript==
  15. "use strict";
  16.  
  17. function waitForElementToExist(selector) {
  18. return new Promise((resolve) => {
  19. if (document.querySelector(selector)) {
  20. return resolve(document.querySelector(selector));
  21. }
  22.  
  23. const observer = new MutationObserver(() => {
  24. if (document.querySelector(selector)) {
  25. resolve(document.querySelector(selector));
  26. observer.disconnect();
  27. }
  28. });
  29.  
  30. observer.observe(document.body, {
  31. subtree: true,
  32. childList: true,
  33. });
  34. });
  35. }
  36.  
  37. function setPlayerSpeed(newSpeed) {
  38. document.getElementsByClassName("html5-main-video")[0].playbackRate =
  39. newSpeed;
  40. }
  41. function insertStyle() {
  42. const header = document.header;
  43. const style = document.createElement("style");
  44. style.innerHTML = `
  45. .speed-button {
  46.  
  47. }
  48. .speed-button.active, .speed-button:hover {
  49. color: white;
  50. }
  51. `;
  52. header.appendChild(style);
  53. }
  54. async function main() {
  55. const menuR = await waitForElementToExist(".ytp-right-controls");
  56.  
  57. if (typeof menuR !== "undefined" && menuR !== null) {
  58. [2, 1.5, 1.25, 1, 0.75, 0.5].forEach((speed) => {
  59. const button = document.createElement("button");
  60. button.innerText = `x${speed}`;
  61. button.classList.add("ytp-button speed-button");
  62. button.onclick = () => setPlayerSpeed(speed);
  63. menuR.prepend(button);
  64. });
  65. }
  66. }
  67. main();