Bilibili FullScreen Progressbar

B站 活动标签页自动播放, 更大全屏按钮, 视频进度条等增强功能

当前为 2021-02-01 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Bilibili FullScreen Progressbar
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1
  5. // @description B站 活动标签页自动播放, 更大全屏按钮, 视频进度条等增强功能
  6. // @author Finn
  7. // @match https://www.bilibili.com/video/*
  8. // @grant none
  9. // @license MIT
  10. // ==/UserScript==
  11.  
  12. (function () {
  13.  
  14. 'use strict';
  15. var set = localStorage.getItem("bilibili_player_settings");
  16. console.log("数据查看", set)
  17.  
  18. const initStyle = `<style id="FinnStyle">
  19. /*全屏控制区域*/
  20. #finnDrag{position:absolute;left:50%;top:30%;
  21. margin-left:calc(-15%);z-index:1000;
  22. background:#ffffff5e;width:30%;height:30%;
  23. transition:all 0.2s;border:2px dotted gold;
  24. opacity:0;cursor:se-resize;opacity:0;}
  25. #finnDrag:hover{opacity:1}
  26. /*添加进度条*/
  27. #finnProgress{--rule:3vw; position:absolute;left:calc(var(--rule) / 2);top:calc(var(--rule) / 2);z-index:1000;
  28. background:conic-gradient(transparent 100%,#cccccc57 0%);
  29. width:calc(var(--rule)); height:calc(var(--rule));border-radius:50%;
  30. text-align:center;color:#eeeeeea8;font-size:15px;line-height:100px;
  31. box-shadow:0 0 20px #bfbfbf21;}</style>
  32. `;
  33. document.documentElement.insertAdjacentHTML("afterbegin", initStyle);
  34.  
  35. window.addEventListener("DOMContentLoaded", function () {
  36.  
  37. //get Button
  38. const player = document.querySelector("#playerWrap");
  39.  
  40.  
  41.  
  42. let observer = new MutationObserver(function (mutations) {
  43. console.log("mutations", mutations);
  44. //let btn = player.querySelector(".bilibili-player-iconfont-fullscreen-off");//全屏按钮🔘
  45. let btn = player.querySelector(".bilibili-player-iconfont-web-fullscreen-off");//网页全屏按钮🔘
  46. const fullwrap = document.querySelector("#bilibiliPlayer");
  47. const totalTime = document.querySelector(".bilibili-player-video-time-total");
  48. console.log(totalTime);
  49.  
  50. if (btn) {
  51. btn.setAttribute("id", "finnFor");
  52. //btn.click();//原生click()事件只支持有默认点击行为的元素;
  53. observer.disconnect();
  54. }
  55.  
  56. //如果当前标签页active, 自动播放
  57. /*let tabhidden = document.hidden;
  58. // if (!tabhidden) {
  59. let playarea = document.querySelector("#playerWrap video");//点击播放区域
  60. // playarea.click();*/
  61. setTimeout(function () {
  62. /* var e = document.createEvent("MouseEvents");
  63. e.initEvent("click", true, true);
  64. playarea.dispatchEvent(e); */
  65.  
  66. //添加全屏按钮
  67.  
  68. const fullBtn = `<label for="finnFor" id="finnDrag"></label>`
  69. //fullBtn.addEventListener("click", function (e) { console.log("fullBtn click 点击"), e.stopPropagation() })
  70. fullwrap.insertAdjacentHTML("afterbegin", fullBtn);
  71.  
  72. //添加进度条
  73. let progress = `<div id="finnProgress">${totalTime.textContent}</div>`;
  74. fullwrap.insertAdjacentHTML("afterbegin", progress);
  75. //进度条
  76. progressBar();
  77. }, 500)
  78. })
  79. let obConfig = {
  80. childList: true,
  81. subtree: true
  82. }
  83. observer.observe(player, obConfig);
  84.  
  85. function progressBar() {
  86. let bar = document.querySelector("#finnProgress");
  87. console.log(bar)
  88. let barStatus = setInterval(function () {
  89. if (!bar) {
  90. console.log("不存在进度条")
  91. } else {
  92. console.log("存在进度条");
  93. //progress.onmouseenter=function(){}
  94. let p = +document.querySelector(".bilibili-player-drag-mask-progress-tempo").style.transform.replace(/[^.0-9]/ig, "");//获取当前进度值
  95. bar.style.background = `conic-gradient(transparent ${p * 100}%,#ffffff47 0% )`;
  96.  
  97. if (p == 1) { clearInterval(barStatus) };
  98. }
  99. }, 500);
  100.  
  101. }
  102. })
  103.  
  104. })();