您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Youtube floating player.
当前为
- // ==UserScript==
- // @name Youtube floating player
- // @description Youtube floating player.
- // @version 2.0
- // @author REVerdi
- // @namespace https://openuserjs.org/users/REVerdi
- // @copyright 2014+, REVerdi (https://openuserjs.org/users/REVerdi)
- // @license (CC) Attribution Non-Commercial Share Alike; http://creativecommons.org/licenses/by-nc-sa/3.0/
- // Por causa do SPF (Structured Page Fragments), não posso usar // @include http*://www.youtube.com/watch?*
- // porque se o 1° link no YouTube não for do tipo acima, esse script nunca será executado.
- // @include http*://www.youtube.com/*
- // @grant none
- // ==/UserScript==
- /*
- TESTADO APENAS NO FIREFOX
- ONLY TESTED ON FIREFOX
- */
- /*
- O YouTube "quase" exatamente como eu queria!
- Eu não sou programador, então não joguem tomates podres em mim :)
- YouTube "almost" exactly as I wanted!
- I'm not a programmer, so don't throw rotten tomatoes at me :)
- */
- // Based on the ideia of drhouse (http://userscripts.org/scripts/show/186872)
- // and contains source code written by tforbus:
- // https://chrome.google.com/webstore/detail/video-pinner/egfhbaheiflmihggjcfmnmchkijkcdpl
- // https://github.com/tforbus/youtube-fixed-video-bookmarklet
- // http://www.whattheforbus.com/youtube-bookmarklet
- // http://www.tristinforbus.com/
- (function(){
- "use strict";
- var _window;
- if (typeof unsafeWindow !== undefined){
- _window = unsafeWindow;
- }
- else {
- _window = window;
- }
- var bodyDivName = 'body';
- //var pageDivName = 'page';
- //var headerDivName = 'yt-masthead';
- //var header;
- //var headerRect;
- var placeholderPlayerDivName = 'placeholder-player';
- var placeHolderPlayer;
- var playerDivName = 'player';
- var player;
- var playerRect;
- var contentDivName = 'watch7-content';
- var content;
- var contentRect;
- var sidebarDivName = 'watch7-sidebar';
- var sidebar;
- var sidebarRect;
- var footerDivName = 'footer-container';
- var footer;
- //var footerRect;
- var isBodyMutationObserverAdded = 0;
- var isPageScrollOrResizeListenerAdded = 0;
- //if (document.getElementById('movie_player')) document.getElementById('movie_player').style.border = "thick solid blue";
- //if (document.getElementById('player')) document.getElementById('player').style.border = "thick solid red";
- function pageScrollOrResize(evt) {
- player = document.getElementById(playerDivName);
- placeHolderPlayer = document.getElementById(placeholderPlayerDivName);
- if ( placeHolderPlayer ) { //user IS on a video page
- placeHolderPlayer.firstElementChild.style.backgroundColor = 'transparent';
- //player = document.getElementById(playerDivName);
- content = document.getElementById(contentDivName);
- sidebar = document.getElementById(sidebarDivName);
- footer = document.getElementById(footerDivName);
- //footer.style.position = 'fixed'; //fixa o rodapé na base da página
- //footer.style.bottom = '0px'; //fix the footer at the base of page
- if ( _window.pageYOffset > 0 ) { //scroll > 0
- player.style.position = 'fixed';
- player.style.top = '60px';
- contentRect = content.getBoundingClientRect();
- player.style.left = contentRect.left+'px';
- //player.style.zIndex = 998;
- sidebar.style.position = 'absolute';
- //sidebar.style.top = player.clientHeight+'px';
- //sidebar.style.zIndex = 999;
- if ( /list/.test(document.location) === false ) { //user is NOT playing a playlist
- player.style.zIndex = 998;
- sidebar.style.zIndex = 999;
- }
- else { //user IS playing a playlist
- player.style.zIndex = 999;
- sidebar.style.zIndex = 998;
- sidebarRect = sidebar.getBoundingClientRect();
- playerRect = player.getBoundingClientRect();
- player.style.width = sidebarRect.right - playerRect.left + 'px'; //playlist width
- }
- //content.style.position = 'relative';
- //content.style.top = player.clientHeight + 'px';
- //content.style.zIndex = 997;
- }
- else { //scroll == 0
- player.style.position = '';
- player.style.top = '';
- player.style.left = '';
- //player.style.zIndex = '';
- sidebar.style.position = '';
- //sidebar.style.top = '';
- //sidebar.style.zIndex = '';
- player.style.zIndex = '';
- sidebar.style.zIndex = '';
- player.style.width = '';
- //content.style.position = '';
- //content.style.top = '';
- //content.style.zIndex = '';
- }
- }
- else { //user is NOT on a video page
- player.style.position = '';
- player.style.top = '';
- player.style.left = '';
- player.style.zIndex = '';
- player.style.width = '';
- }
- }
- var bodyMutationOberver = new MutationObserver(function(mutations) {
- mutations.forEach(function(mutation) {
- if ( isPageScrollOrResizeListenerAdded === 0 ) {
- document.addEventListener('scroll', pageScrollOrResize, false);
- _window.addEventListener('resize', pageScrollOrResize, false);
- isPageScrollOrResizeListenerAdded = 1;
- }
- });
- });
- function addBodyMutationObserver() {
- var config = { attributes: true, characterData: true, childList: true };
- var target = document.getElementById(bodyDivName); //tem que ser 'body', porque 'page' só funciona quando a 1ª página NÃO for uma de vídeo
- if ( target !== null ) { //( target !== null ) ou apenas ( target )
- bodyMutationOberver.observe(target, config);
- isBodyMutationObserverAdded = 1;
- }
- }
- function entryPoint() {
- if( isBodyMutationObserverAdded === 0 ) {
- addBodyMutationObserver();
- }
- }
- entryPoint();
- })();