您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds a fullscreen button to the fishtank.live video player.
- // ==UserScript==
- // @name Fullscreen Button for fishtank.live
- // @namespace http://tampermonkey.net/
- // @version 1.1
- // @description Adds a fullscreen button to the fishtank.live video player.
- // @author Flowscript
- // @match https://www.fishtank.live/*
- // @license MIT
- // @grant none
- // ==/UserScript==
- (function() {
- 'use strict';
- const videoSelectors = [
- '.livepeer-video-player_livepeer-video-player__NRXYi',
- '.livepeer-video-player_livepeer-video-player__NRXYi'
- ];
- const videoSelector = '#livepeer-video-player video';
- const controlsContainerSelector = '.livepeer-video-player_controls__y36El';
- function toggleFullscreen(videoContainer, video) {
- if (!document.fullscreenElement) {
- videoContainer.requestFullscreen().then(() => {
- video.play(); // Ensure the video continues playing when entering fullscreen
- }).catch(err => {
- console.error(`Error attempting to enable full-screen mode: ${err.message} (${err.name})`);
- });
- } else {
- document.exitFullscreen().then(() => {
- video.play(); // Ensure the video continues playing when exiting fullscreen
- });
- }
- }
- function addFullscreenButton(videoContainer, video, controlsContainer) {
- // Check if fullscreen button already exists to avoid duplicates
- if (controlsContainer.querySelector('.custom-fullscreen-button')) {
- return;
- }
- // Create fullscreen button
- const fullscreenButton = document.createElement('button');
- fullscreenButton.className = 'custom-fullscreen-button';
- fullscreenButton.innerHTML = `<div class="icon_icon__bDzMA"><svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="M8 4v2H4v4H2V4a2 2 0 012-2h6v2H8zm8 0V2h6a2 2 0 012 2v6h-2V6h-4V4h-2zm0 16h2v-2h4v-4h2v6a2 2 0 01-2 2h-6v-2zM4 14H2v6a2 2 0 002 2h6v-2H4v-4H2v-2z" fill="currentColor"></path></svg></div>`;
- fullscreenButton.style.all = 'unset';
- fullscreenButton.style.cursor = 'pointer';
- fullscreenButton.style.display = 'flex';
- fullscreenButton.style.alignItems = 'center';
- fullscreenButton.style.justifyContent = 'center';
- fullscreenButton.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';
- fullscreenButton.style.padding = '4px';
- fullscreenButton.style.height = '25px';
- fullscreenButton.style.width = '25px';
- fullscreenButton.style.color = '#fff';
- fullscreenButton.style.pointerEvents = 'auto';
- fullscreenButton.style.position = 'absolute';
- fullscreenButton.style.bottom = '5px';
- fullscreenButton.style.right = '15px';
- fullscreenButton.style.zIndex = '1000';
- fullscreenButton.title = 'Fullscreen';
- // Add hover effect
- fullscreenButton.addEventListener('mouseenter', () => {
- fullscreenButton.style.color = '#f8ec94';
- });
- fullscreenButton.addEventListener('mouseleave', () => {
- fullscreenButton.style.color = '#fff';
- });
- fullscreenButton.addEventListener('click', () => {
- toggleFullscreen(videoContainer, video);
- });
- // Add the button to the controls container
- controlsContainer.appendChild(fullscreenButton);
- }
- function addCustomCSS() {
- // Check if the custom style already exists
- if (!document.querySelector('#custom-livepeer-style')) {
- const style = document.createElement('style');
- style.id = 'custom-livepeer-style';
- style.innerHTML = `
- div[class*="live-stream-clipping_live-stream-clipping__"] {
- margin-bottom: 25px;
- }
- `;
- document.head.appendChild(style);
- }
- }
- function applyChanges() {
- videoSelectors.forEach(selector => {
- const videoContainer = document.querySelector(selector);
- const video = document.querySelector(videoSelector);
- const controlsContainer = document.querySelector(controlsContainerSelector);
- if (videoContainer && controlsContainer) {
- addFullscreenButton(videoContainer, video, controlsContainer);
- addCustomCSS();
- }
- });
- }
- function handleKeydown(event) {
- const activeElement = document.activeElement;
- const isInputFocused = activeElement.tagName === 'INPUT' ||
- activeElement.tagName === 'TEXTAREA' ||
- activeElement.isContentEditable;
- if (!isInputFocused && (event.key === 'f' || event.key === 'F')) {
- videoSelectors.forEach(selector => {
- const videoContainer = document.querySelector(selector);
- const video = document.querySelector(videoSelector);
- if (videoContainer && video) {
- toggleFullscreen(videoContainer, video);
- }
- });
- }
- }
- document.addEventListener('keydown', handleKeydown);
- // Use MutationObserver to detect changes in the DOM
- const observer = new MutationObserver(applyChanges);
- observer.observe(document.body, { childList: true, subtree: true });
- // Initial application
- applyChanges();
- })();