自定义倍数

添加b站自定义倍数功能

  1. // ==UserScript==
  2. // @name 自定义倍数
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.3
  5. // @description 添加b站自定义倍数功能
  6. // @author You
  7. // @match https://www.bilibili.com/video/*
  8. // @icon https://www.google.com/s2/favicons?domain=bilibili.com
  9. // @grant none
  10. // @license MIT
  11. // ==/UserScript==
  12.  
  13. (function() {
  14. 'use strict';
  15. const utils = {
  16. isContainOneElementClassNameIs(className) {
  17. let fsadt = document.getElementsByClassName(className);
  18. if (fsadt.length) {
  19. return true;
  20. } else {
  21. return false;
  22. }
  23. },
  24. setSpeedStory(speed) {
  25. localStorage.setItem('my_speed',speed);
  26. },
  27. getSpeed() {
  28. return localStorage.getItem('my_speed') || 2.0;
  29. }
  30. };
  31. // 不停的尝试
  32. let tryAndTryFns = [];
  33. function tryAndTry() {
  34. setInterval(() => {
  35. tryAndTryFns.forEach(f => f());
  36. },500);
  37. }
  38. let changeActive = speed => {
  39. let speedList = document.getElementsByClassName('bilibili-player-video-btn-speed-menu-list');
  40. let btn = speedList[0].parentElement.parentElement.parentElement.children[0];
  41. for (let i = 0;i < speedList.length;i++) {
  42. let _speed = speedList[i].innerHTML;
  43. if (speedList[i].classList.contains('bilibili-player-active')) {
  44. speedList[i].classList.remove('bilibili-player-active');
  45. }
  46. if (_speed === speed) {
  47. speedList[i].classList.add('bilibili-player-active');
  48. }
  49. }
  50. btn.innerHTML = speed;
  51. utils.setSpeedStory(speed);
  52. }
  53. function addOtherSpeed() {
  54. let speedList = document.getElementsByClassName('bpx-player-ctrl-playbackrate-menu')[0];
  55. if (speedList.getAttribute('set') === 'true') {
  56. return ;
  57. }
  58. speedList.setAttribute('set','true');
  59. let createSpeedLi = (speed,parentDom) => {
  60. let li25 = document.createElement('li');
  61. parentDom.appendChild(li25);
  62. li25.classList.add('my-added-speed');
  63. li25.setAttribute('data-value',speed);
  64. li25.innerHTML = `${speed} X`;
  65. li25.onclick = function () {
  66. let speed_ = li25.getAttribute('data-value');
  67. let v = document.getElementsByTagName('video');
  68. if (v.length) {
  69. v = v[0];
  70. } else {
  71. v = document.getElementsByTagName('bwp-video')[0];
  72. }
  73. v.playbackRate = parseFloat(speed_);
  74. }
  75. return li25;
  76. };
  77. createSpeedLi(2.5,speedList);
  78. createSpeedLi(3,speedList);
  79. createSpeedLi(0.5,speedList);
  80. new Array(...speedList.getElementsByTagName('li')).map(_=> {
  81. _.onclick = function() {
  82. let v = parseFloat(_.getAttribute('data-value'));
  83. utils.setSpeedStory(v);
  84. }
  85. });
  86. return ``
  87. }
  88. function fullScreenAndDoubleTime() {
  89. if (utils.isContainOneElementClassNameIs('ibas-fullScreenAndDoubleTime')) {
  90. return;
  91. }
  92. var d = document.createElement('div');
  93. d.classList.add('bpx-player-ctrl-btn');
  94. d.classList.add('bpx-player-ctrl-time');
  95. d.innerHTML += `<div class="bpx-player-ctrl-time-label" style="cursor: pointer;" speed="${utils.getSpeed()}">
  96. <span class="bilibili-player-video-time-now">全屏+${utils.getSpeed()}倍</span>
  97. </div>`;
  98. addOtherSpeed();
  99. var control = document.getElementsByClassName('bpx-player-control-bottom-left')[0].append(d);
  100. d.children[0].onclick = function () {
  101. let speed = parseFloat(this.getAttribute('speed'));
  102. let speedList = document.getElementsByClassName('bpx-player-ctrl-playbackrate-menu')[0].getElementsByTagName('li');
  103. for (let i = 0;i < speedList.length;i++) {
  104. if (parseFloat(speedList[i].getAttribute('data-value')) === speed) {
  105. speedList[i].click();
  106. break;
  107. }
  108. }
  109. document.getElementsByClassName('bpx-player-ctrl-web-enter')[0].click()
  110. };
  111. tryAndTryFns.pop();
  112. }
  113. let createStyle = () => {
  114. let style = document.createElement('style');
  115. style.innerHTML = `
  116. .my-added-speed:hover {
  117. background-color: hsla(0,0%,100%,.1);
  118. }
  119. .my-added-speed {
  120. position: relative;
  121. height: 36px;
  122. line-height: 36px;
  123. cursor: pointer;
  124. }
  125. `;
  126. document.head.appendChild(style);
  127. };
  128. setTimeout(() => {
  129. createStyle();
  130. tryAndTryFns.push(fullScreenAndDoubleTime);
  131. tryAndTry();
  132. },2000);
  133. // Your code here...
  134. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址