您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
改变YouTuBe视频为竖屏播放
// ==UserScript== // @name YouTuBeChangeScreen // @namespace http://roastwind.com/ // @version 0.1.6 // @description 改变YouTuBe视频为竖屏播放 // @include http://www.youtube.com/* // @include https://www.youtube.com/* // @require https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js // @exclude http://www.youtube.com/embed/* // @exclude https://www.youtube.com/embed/* // @match http://www.youtube.com/* // @match https://www.youtube.com/* // @match http://localhost:8083/* // @match http://s.ytimg.com/yts/jsbin/html5player* // @match https://s.ytimg.com/yts/jsbin/html5player* // @match http://manifest.googlevideo.com/* // @match https://manifest.googlevideo.com/* // @match http://*.googlevideo.com/videoplayback* // @match https://*.googlevideo.com/videoplayback* // @match http://*.youtube.com/videoplayback* // @match https://*.youtube.com/videoplayback* // @copyright 2018+, Find // @author RoastWind // @icon http://icons.iconarchive.com/icons/dtafalonso/android-l/256/Youtube-icon.png // ==/UserScript== document.onreadystatechange = function () { // console.log(document.readyState) switch(document.readyState){ // ready case 'interactive': // init() break; // load case 'complete': break; } } var ready = function(callback) { var href = window.location.href var isYoutubePlay = /^https?:\/\/www\.youtube.com\/watch\?/.test(href) if (!isYoutubePlay) return var timer = setInterval(function() { var player = document.querySelector('#player-container') var container = document.querySelector('.ytd-video-primary-info-renderer') if (player && container) { clearInterval(timer) callback && callback() } }, 100) } ready(function() { init() }) var getVideoVerticalHeight = function() { var innerHeight = document.documentElement.clientHeight; var headerHeight = document.querySelector('#masthead-container').clientHeight || 0; var vedieoPaddingTop = 24; var verticalHeight = innerHeight - headerHeight - vedieoPaddingTop; return verticalHeight; } var updateVideoInfoStatus = function(opacity) { var domIds = ['title yt-formatted-string', 'top-row', 'bottom-row'] domIds.forEach(function(domId) { var dom = document.querySelector('#' + domId) dom.style.opacity = opacity }) } var updateButtonPosition = function(isVertical) { var videoTitle = document.querySelector('#title yt-formatted-string') var titleWidth = videoTitle.offsetWidth var button = getButton() button.style.marginLeft = isVertical ? '0' : `${buttonMarginLeft}px` button.style.position = isVertical ? 'absolute' : 'initial' if (isVertical) { button.style.left = `-${videoMarginLeft}px` button.style.zIndex = 3000 } else { delete button.style.left delete button.style.zIndex } } var getButton = function() { return document.querySelector('#'+btnId) } var changeVideo = function() { // header var container = document.querySelector('#masthead-container').offsetHeight // var container = document.querySelector('.style-scope ytd-masthead') var topHeight = container.offsetHeight // video container var playerContainer = document.querySelector('#player-container') var player = document.querySelector('#ytd-player') var video = player.querySelector('video') var changeScreenBtn = getButton() // video.addEventListener('play', function () { // console.log('play') // }) // var newTop = (videoBaseWidth - videoBaseHeight) / 2 // 减去顶部的高度 // videoBaseWidth = videoBaseWidth - topHeight // 减去工具栏的高度(没有标签页) // videoBaseWidth = videoBaseWidth - 70 // var screenHeight = document.documentElement.clientHeight // if (videoBaseWidth > screenHeight - topHeight) { // videoBaseWidth = screenHeight - topHeight // } isVertical = !isVertical updateVideoInfoStatus(isVertical ? 0 : 1) updateButtonPosition(isVertical) if (isVertical) { var videoBaseHeight = video.offsetHeight var videoBaseWidth = video.offsetWidth var verticalHeight = getVideoVerticalHeight() globalVideoBaseHeight = videoBaseHeight globalVideoBaseWidth = videoBaseWidth video.style.width = videoBaseWidth + 'px' video.style.height = verticalHeight + 'px' video.style.top = '0px' video.style.transform = 'rotate(90deg)' player.style.height = verticalHeight + 'px' playerContainer.style.height = verticalHeight + 'px' playerContainer.style.maxHeight = 'none' changeScreenBtn.innerText = baseBtnResetText } else { video.style.width = globalVideoBaseWidth + 'px' video.style.height = globalVideoBaseHeight + 'px' video.style.transform = 'rotate(0deg)' player.style.height = globalVideoBaseHeight + 'px' playerContainer.style.height = globalVideoBaseHeight + 'px' playerContainer.style.maxHeight = 'max-height: calc(100vh - 169px);' changeScreenBtn.innerText = baseBtnText } } var isInitReady = false // 需要等待youtube加载完毕 var waitTime = 2e3 var isVertical = false var globalVideoBaseHeight = 400 // 视频原本高度 var globalVideoBaseWidth = 400 // 视频原本宽度 var buttonMarginLeft = 24 var videoMarginLeft = 24 var btnId = 'you-tu-be-change-screen' var baseBtnText = '切换竖屏' var baseBtnResetText = '切换横屏' var initButton = function() { var container = document.querySelector('ytd-watch-metadata') var h1 = container.querySelector('h1') var title = h1.querySelector('yt-formatted-string') // h1.style.position = 'relative' var button = document.createElement('button') button.innerText = baseBtnText button.style.color = 'gray' button.addEventListener('click', function() { if (isInitReady) { changeVideo() } else { alert('please wait for the video ready') } }) title.after(button) // button.style.position = 'absolute' button.style.marginLeft = buttonMarginLeft + 'px' button.setAttribute('id', btnId) // button.style.marginTop = '-60px' setTimeout(() => { isInitReady = true button.style.color = 'black' }, waitTime) } var init = function() { initButton() }