YouTube Rotate 90°

Youtube影片旋轉90°

目前为 2019-11-15 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name YouTube Rotate 90°
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.0
  5. // @description Youtube影片旋轉90°
  6. // @author zaqwsx2205
  7. // @match https://*.youtube.com/*
  8. // @match https://*.youtube.com/watch?v=*
  9. // @match https://www.youtube.com/embed/*
  10. // @match https://www.youtube-nocookie.com/embed/*
  11. // @require https://code.jquery.com/jquery-3.4.1.min.js
  12. // @grant none
  13. // ==/UserScript==
  14.  
  15. (function() {
  16. 'use strict';
  17.  
  18. var width;
  19. var height;
  20. var heightTest;
  21. var bool = false;
  22. var safeTest = location.href;
  23.  
  24. function transform90(){
  25. setTimeout(function(){
  26. width = $(".html5-video-container").outerWidth();
  27. height = $(".html5-video-container").outerHeight();
  28. heightTest = width - height;
  29. $(".video-test1").html('<style>.video-stream{width:calc(100% - '+heightTest+'px)!important;}</style>');
  30. }, 20);
  31. }
  32.  
  33. function build(){
  34. $(".video-test, .video-test1, .video-test2, .transform90").remove();
  35.  
  36. if($(".ytp-embed").length > 0){
  37. $(".html5-video-container").append('<div class="video-test2"></div>');
  38. $(".video-test2").html('<style>.ytp-autohide .transform90-top{opacity: 0;-moz-transition: opacity .1s cubic-bezier(0.4,0.0,1,1);-webkit-transition: opacity .1s cubic-bezier(0.4,0.0,1,1);transition: opacity .1s cubic-bezier(0.4,0.0,1,1);}.ytp-transform90-icon {margin: auto;width: 36px;height: 36px;position: relative;}.ytp-big-mode .ytp-transform90-icon {width: 54px;height: 54px;} .ytp-transform90-title{font-weight: 500;text-align: center;font-size: 14px;} .ytp-big-mode .ytp-transform90-title{font-size: 20px;}</style>');
  39. $('.ytp-chrome-top-buttons').prepend('<button class="ytp-button transform90 transform90-top" data-tooltip-opaque="true" aria-label="" style="width: auto;height: auto;"><div class="ytp-transform90-icon" style="transform:scaleX(-1);"><svg version="1.1" x="0px" y="0px" viewBox="0 0 453.227 453.227" style="enable-background:new 0 0 453.227 453.227;" xml:space="preserve" width="50%" height="100%" class=""><g><g><g><g><path d="M139.453,120.747L1.107,259.093L139.453,397.44L277.8,259.093L139.453,120.747z M61.373,259.093l77.973-77.973 l78.08,77.973l-77.973,77.973L61.373,259.093z" data-original="#000000" class="active-path" data-old_color="#000000" fill="#FFFFFF"/><path d="M395.88,125.44C358.333,88,309.267,69.227,260.093,69.227V0l-90.56,90.56l90.56,90.453v-69.12 c38.187,0,76.48,14.613,105.6,43.733c58.347,58.347,58.347,152.853,0,211.2c-29.12,29.12-67.413,43.733-105.6,43.733 c-20.693,0-41.28-4.373-60.48-12.907l-31.787,31.787c28.587,15.787,60.373,23.787,92.267,23.787 c49.173,0,98.24-18.773,135.787-56.213C470.867,322.027,470.867,200.427,395.88,125.44z" data-original="#000000" class="active-path" data-old_color="#000000" fill="#FFFFFF"/></g></g></g></g> </svg></div><div class="ytp-transform90-title">Video Rotate 90°</div></button>');
  40. }else{
  41. $(".ytp-right-controls").prepend('<button class="transform90 ytp-button" title="Video Rotate 90°" aria-label="Video Rotate 90°" style="display: inline-flex;justify-content: center; transform:scaleX(-1);"><svg version="1.1" x="0px" y="0px" viewBox="0 0 453.227 453.227" style="enable-background:new 0 0 453.227 453.227;" xml:space="preserve" width="50%" height="100%" class=""><g><g><g><g><path d="M139.453,120.747L1.107,259.093L139.453,397.44L277.8,259.093L139.453,120.747z M61.373,259.093l77.973-77.973 l78.08,77.973l-77.973,77.973L61.373,259.093z" data-original="#000000" class="active-path" data-old_color="#000000" fill="#FFFFFF"/><path d="M395.88,125.44C358.333,88,309.267,69.227,260.093,69.227V0l-90.56,90.56l90.56,90.453v-69.12 c38.187,0,76.48,14.613,105.6,43.733c58.347,58.347,58.347,152.853,0,211.2c-29.12,29.12-67.413,43.733-105.6,43.733 c-20.693,0-41.28-4.373-60.48-12.907l-31.787,31.787c28.587,15.787,60.373,23.787,92.267,23.787 c49.173,0,98.24-18.773,135.787-56.213C470.867,322.027,470.867,200.427,395.88,125.44z" data-original="#000000" class="active-path" data-old_color="#000000" fill="#FFFFFF"/></g></g></g></g> </svg></button>');
  42. }
  43.  
  44. $('.transform90').on("click", function() {
  45. bool = !bool;
  46. if(bool){
  47. $(".html5-video-container").append('<div class="video-test"></div>');
  48. $(".html5-video-container").append('<div class="video-test1"></div>');
  49. $(".video-test").html('<style>.html5-video-container {display: flex;justify-content: center;align-items: center;height: 100%;}.video-stream{position:relative !important; transform:rotate(90deg); height:auto !important; left:0 !important; top:0 !important;}</style>');
  50. transform90();
  51. }else{
  52. $(".video-test, .video-test1").remove();
  53. }
  54. });
  55.  
  56. }
  57.  
  58. function observeTEST() {
  59. var composeBox = $('#player-container video')[0];
  60. var composeObserver = new MutationObserver(function(e) {
  61. if(safeTest != location.href){
  62. safeTest = location.href;
  63. bool = false;
  64. build();
  65. }
  66. });
  67. if(!composeBox) {
  68. window.setTimeout(observeTEST,500);
  69. return;
  70. }
  71. var config = {characterData: true, childList: true, attributes: true};
  72. composeObserver.observe(composeBox,config);
  73. }
  74.  
  75. $(document).ready(function(){
  76. build();
  77. observeTEST();
  78.  
  79. $(window).resize( function () {
  80. if(bool){
  81. transform90();
  82. }
  83. });
  84.  
  85. document.addEventListener("fullscreenchange", function( event ) {
  86. if(bool){
  87. transform90();
  88. }
  89. });
  90.  
  91. $(".ytp-size-button").click(function(){
  92. if(bool){
  93. transform90();
  94. }
  95. });
  96.  
  97. });
  98. })();