您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Buttons for quick scrolling in different directions.
当前为
- // ==UserScript==
- // @name TesterTV_ScrollButtons
- // @namespace
- // @version 2023.11.29
- // @description Buttons for quick scrolling in different directions.
- // @license GPL version 3 or any later version
- // @author TesterTV
- // @match *://*/*
- // @grant GM_openInTab
- // @grant GM.setValue
- // @grant GM.getValue
- // ==/UserScript==
- (function() {
- //********************************************************************************************************************
- //*** Variables 🇻🇦🇷 ***
- //********************************************************************************************************************
- // General variables
- var ButtonsOpacityDefault = '0.05';
- var ButtonsOpacityMouseOver = '1';
- var PositionHorizontalRight = (document.documentElement.clientWidth - 81) + 'px';
- var PositionHorizontalLeft= '15px';
- var ButtonSize = '66px';
- var FontSize = '50px';
- // Check if current window is an iframe
- var isInIframe = window !== window.top;
- //********************************************************************************************************************
- //*** Button ⬆️ ***
- //********************************************************************************************************************
- // Create the button element
- var TopSideButton = document.createElement('button');
- TopSideButton.innerHTML = '⬆️';
- TopSideButton.style.height = ButtonSize;
- TopSideButton.style.width = ButtonSize;
- TopSideButton.style.fontSize = FontSize;
- TopSideButton.style.position = 'fixed';
- TopSideButton.style.left = PositionHorizontalRight;
- TopSideButton.style.top = '42%';
- TopSideButton.style.transform = 'translateY(-50%)';
- TopSideButton.style.opacity = ButtonsOpacityDefault;
- TopSideButton.style.background = 'transparent';
- TopSideButton.style.border = 'none';
- TopSideButton.style.outline = 'none';
- TopSideButton.style.zIndex = '9996';
- TopSideButton.id="TopSideButton";
- // Hide the button if in an iframe
- if (isInIframe) {
- TopSideButton.style.display = 'none';
- }
- document.body.appendChild(TopSideButton);
- //********************************************************************************************************************
- //*** Button - Functionality ⬆️⚙️ ***
- //********************************************************************************************************************
- // Function to scroll to the top of the page
- function scrollToTop() {
- window.scrollTo(0, 0);
- }
- // Add event listener to scroll when button is clicked
- TopSideButton.addEventListener('click', scrollToTop);
- // Show TopSideButton when mouse cursor is over it
- TopSideButton.addEventListener('mouseenter', function() {
- TopSideButton.style.opacity = ButtonsOpacityMouseOver;
- });
- // Hide TopSideButton when mouse cursor leaves it
- TopSideButton.addEventListener('mouseleave', function() {
- TopSideButton.style.opacity = ButtonsOpacityDefault;
- });
- //********************************************************************************************************************
- //*** Button ⬇️ ***
- //********************************************************************************************************************
- // Create the button element
- var BottomSideButton = document.createElement('button');
- BottomSideButton.innerHTML = '⬇️';
- BottomSideButton.style.height = ButtonSize;
- BottomSideButton.style.width = ButtonSize;
- BottomSideButton.style.fontSize = FontSize;
- BottomSideButton.style.position = 'fixed';
- BottomSideButton.style.left = PositionHorizontalRight;
- BottomSideButton.style.top = '58%';
- BottomSideButton.style.transform = 'translateY(-50%)';
- BottomSideButton.style.opacity = ButtonsOpacityDefault;
- BottomSideButton.style.background = 'transparent';
- BottomSideButton.style.border = 'none';
- BottomSideButton.style.outline = 'none';
- BottomSideButton.style.zIndex = '9998';
- BottomSideButton.id="BottomSideButton";
- // Hide the button if in an iframe
- if (isInIframe) {
- BottomSideButton.style.display = 'none';
- }
- document.body.appendChild(BottomSideButton);
- //********************************************************************************************************************
- //*** Button - Functionality ⬇️⚙️ ***
- //********************************************************************************************************************
- // Function to scroll to the bottom of the page
- function scrollToBottom() {
- window.scrollTo(0, document.body.scrollHeight);
- }
- // Add event listener to scroll when button is clicked
- BottomSideButton.addEventListener('click', scrollToBottom);
- // Show BottomSideButton when mouse cursor is over it
- BottomSideButton.addEventListener('mouseenter', function() {
- BottomSideButton.style.opacity = ButtonsOpacityMouseOver;
- });
- // Hide BottomSideButton when mouse cursor leaves it
- BottomSideButton.addEventListener('mouseleave', function() {
- BottomSideButton.style.opacity = ButtonsOpacityDefault;
- });
- //********************************************************************************************************************
- //*** Load buttons options -buttons horizontal position and visibility 🔄 ***
- //********************************************************************************************************************
- GM.getValue("SideButtonsOption", "").then(function(value) {
- // Check if the script is running in an iframe
- if (window.self !== window.top) {
- // Hide the buttons in iframes
- TopSideButton.style.display = 'none';
- BottomSideButton.style.display = 'none';
- } else {
- // Retrieve the value of SideButtonsOption using GM.getValue (DropDown1)
- GM.getValue("SideButtonsOption", "").then(function(value) {
- if (value === '0'|| value === '') {
- TopSideButton.style.left = PositionHorizontalRight;
- BottomSideButton.style.left = PositionHorizontalRight;
- TopSideButton.style.display = 'block';
- BottomSideButton.style.display = 'block';
- } else if (value === '1') {
- TopSideButton.style.left = PositionHorizontalLeft;
- BottomSideButton.style.left = PositionHorizontalLeft;
- TopSideButton.style.display = 'block';
- BottomSideButton.style.display = 'block';
- } else if (value === '2') {
- TopSideButton.style.display = 'none';
- BottomSideButton.style.display = 'none';
- }
- });
- }
- });
- //********************************************************************************************************************
- //*** Load buttons options -buttons Vertical position and visibility 🔄 ***
- //********************************************************************************************************************
- GM.getValue("SideButtonsSliderOption", "").then(function(value) {
- TopSideButton.style.top = 'calc(' + value + '%)';
- BottomSideButton.style.top = 'calc(' + (100 - value) + '%)';
- });
- //********************************************************************************************************************
- //*** Check if only media is visible 🔄🎵🎬 Check if YouTube full screen is visible ***
- //********************************************************************************************************************
- function checkButtonState() {
- // Don't show buttons if only media is visible
- // Get the current URL
- var currentUrl = window.location.href;
- // Check if the last letters in the URL are extension
- var fileExtensions = ["jpg", "jpeg", "png", "gif", "svg", "webp", "apng", "webm", "mp4", "webm", "mp3", "wav", "ogg" ];
- var isMatch = fileExtensions.some(function(extension) {
- return currentUrl.slice(-extension.length) === extension;
- });
- // Check if the YouTube in full screen
- var isFullScreen = document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement;
- //If only media or full screen than hide buttons
- if (isMatch || isFullScreen) {
- TopSideButton.style.visibility = 'hidden';
- BottomSideButton.style.visibility = 'hidden';
- BottomButton.style.visibility = 'hidden';
- } else {
- TopSideButton.style.visibility = 'visible';
- BottomSideButton.style.visibility = 'visible';
- BottomButton.style.visibility = 'visible';
- }
- }
- // Check the button state every second
- setInterval(checkButtonState, 1000);
- //********************************************************************************************************************
- //*** Bottom button ⬆️ ***
- //********************************************************************************************************************
- // Create the button element
- var BottomButton = document.createElement('button');
- BottomButton.innerHTML = '⬆️';
- BottomButton.style.height = ButtonSize;
- BottomButton.style.width = ButtonSize;
- BottomButton.style.fontSize = FontSize;
- BottomButton.style.position = 'fixed';
- BottomButton.style.left = '50%';
- BottomButton.style.top = 'calc(100% - 40px)';
- BottomButton.style.transform = 'translateY(-50%)';
- BottomButton.style.opacity = ButtonsOpacityDefault;
- BottomButton.style.background = 'transparent';
- BottomButton.style.border = 'none';
- BottomButton.style.outline = 'none';
- BottomButton.style.zIndex = '9999';
- BottomButton.id="BottomButton";
- // Hide the button if in an iframe
- if (isInIframe) {
- BottomButton.style.display = 'none';
- }
- document.body.appendChild(BottomButton);
- //********************************************************************************************************************
- //*** Bottom button - Functionality ⬆️⚙️ ***
- //********************************************************************************************************************
- // Function to scroll to the top of the page
- function scrollToTop2() {
- window.scrollTo(0, 0);
- }
- // Add event listener to scroll when button is clicked
- BottomButton.addEventListener('click', scrollToTop2);
- // Show BottomButton when mouse cursor is over it
- BottomButton.addEventListener('mouseenter', function() {
- BottomButton.style.opacity = ButtonsOpacityMouseOver;
- });
- // Hide BottomButton when mouse cursor leaves it
- BottomButton.addEventListener('mouseleave', function() {
- BottomButton.style.opacity = ButtonsOpacityDefault;
- });
- //********************************************************************************************************************
- //*** Load bottom button options - button visibility 🔄 ***
- //********************************************************************************************************************
- GM.getValue("BottomButtonOption", "").then(function(value) {
- // Check if the script is running in an iframe
- if (window.self !== window.top) {
- // Hide the buttons in iframes
- BottomButton.style.display = 'none';
- } else {
- // Retrieve the value of SideButtonsOption using GM.getValue (DropDown2)
- GM.getValue("BottomButtonOption", "").then(function(value) {
- if (value === '0'|| value === '') {
- BottomButton.style.display = 'block';
- } else if (value === '1') {
- BottomButton.style.display = 'none';
- }
- });
- }
- });
- //********************************************************************************************************************
- //*** Load buttons options -buttons horizontal position 🔄 ***
- //********************************************************************************************************************
- GM.getValue("BottomButtonSliderOption", "").then(function(value) {
- BottomButton.style.left = 'calc(' + value + '%)';
- });
- //********************************************************************************************************************
- //*** Options 🎛️ ***
- //********************************************************************************************************************
- function handleRightClick(event) {
- event.preventDefault(); // Prevent the default right-click context menu
- //*************************
- //*** DropDownMenu 1 🎚️ ***
- //*************************
- // Create the dropdown menu
- var dropdown1 = document.createElement('select');
- dropdown1.id = 'dropdown1';
- dropdown1.style.fontSize = '15px';
- dropdown1.style.marginLeft = '22px';
- // Define the options for the dropdown menu
- var options1 = [
- { value: 'option0', text: 'Right' },
- { value: 'option1', text: 'Left' },
- { value: 'option2', text: 'Disable' }
- ];
- // Create the option elements and append them to the dropdown menu
- options1.forEach(function(option) {
- var optionElement = document.createElement('option');
- optionElement.value = option.value;
- optionElement.text = option.text;
- dropdown1.appendChild(optionElement);
- });
- // Load/create dropdown1 options
- GM.getValue("SideButtonsOption", "").then(function(value) {
- if (value === '1') {
- dropdown1.selectedIndex = "1";
- } else if (value === '2') {
- dropdown1.selectedIndex = "2";
- } else {
- dropdown1.selectedIndex = "0";
- }
- });
- // Add an event listener to save options change
- dropdown1.addEventListener('change', function() {
- var selectedValue = dropdown1.value;
- if (selectedValue === 'option0') {
- GM.setValue("SideButtonsOption", "0");
- const TopSideButton = document.getElementById('TopSideButton');
- if (TopSideButton) {
- TopSideButton.style.display = 'block';
- TopSideButton.style.left = (document.documentElement.clientWidth - 81) + 'px';
- }
- const BottomSideButton = document.getElementById('BottomSideButton');
- if (BottomSideButton) {
- BottomSideButton.style.display = 'block';
- BottomSideButton.style.left = (document.documentElement.clientWidth - 81) + 'px';
- }
- } else if (selectedValue === 'option1') {
- GM.setValue("SideButtonsOption", "1");
- const TopSideButton = document.getElementById('TopSideButton');
- if (TopSideButton) {
- TopSideButton.style.display = 'block';
- TopSideButton.style.left = '15px';
- }
- const BottomSideButton = document.getElementById('BottomSideButton');
- if (BottomSideButton) {
- BottomSideButton.style.display = 'block';
- BottomSideButton.style.left = '15px';
- }
- } else if (selectedValue === 'option2') {
- //Check if bottom buttom invisible
- if (dropdown2.value === 'option5') {
- alert("All buttons can't be invisible! 🫠");
- } else if (dropdown2.value === 'option4') {
- GM.setValue("SideButtonsOption", "2");
- const TopSideButton = document.getElementById('TopSideButton');
- if (TopSideButton) {TopSideButton.style.display = 'none';}
- const BottomSideButton = document.getElementById('BottomSideButton');
- if (BottomSideButton) {BottomSideButton.style.display = 'none';}
- }
- }
- });
- //*************************
- //*** DropDownMenu 2 🎚️ ***
- //*************************
- // Create the dropdown menu
- var dropdown2 = document.createElement('select');
- dropdown2.id = 'dropdown2';
- dropdown2.style.fontSize = '15px';
- dropdown2.style.marginLeft = '9px';
- // Define the options for the dropdown menu
- var options2 = [
- { value: 'option4', text: 'Enable' },
- { value: 'option5', text: 'Disable' }
- ];
- // Create the option elements and append them to the dropdown menu
- options2.forEach(function(option) {
- var optionElement = document.createElement('option');
- optionElement.value = option.value;
- optionElement.text = option.text;
- dropdown2.appendChild(optionElement);
- });
- // Load/create dropdown2 options
- GM.getValue("BottomButtonOption", "").then(function(value) {
- if (value === '1') {
- dropdown2.selectedIndex = "1";
- } else {
- dropdown2.selectedIndex = "0";
- }
- });
- // Add an event listener to save options change
- dropdown2.addEventListener('change', function() {
- var selectedValue = dropdown2.value;
- if (selectedValue === 'option4') {
- GM.setValue("BottomButtonOption", "0");
- const BottomButton = document.getElementById('BottomButton');
- if (BottomButton) {
- BottomButton.style.display = 'block';
- }
- } else if (selectedValue === 'option5') {
- //Check if side buttoms invisible
- if (dropdown1.value === 'option2') {
- alert("All buttons can't be invisible! 🫠");
- } else if (dropdown1.value === 'option0' || dropdown1.value === 'option1') {
- GM.setValue("BottomButtonOption", "1");
- const BottomButton = document.getElementById('BottomButton');
- if (BottomButton) {BottomButton.style.display = 'none';}
- }
- }
- });
- //*************************
- //*** Labels 🎚️ ***
- //*************************
- // Create labels
- var OptionsTitleLabel = document.createElement('label');
- OptionsTitleLabel.innerHTML = 'Options';
- OptionsTitleLabel.style.color = 'white';
- OptionsTitleLabel.style.fontWeight = 'bold';
- OptionsTitleLabel.style.textDecoration = 'underline';
- OptionsTitleLabel.style.fontSize = '20px';
- var SideButtonsLabel = document.createElement('label');
- SideButtonsLabel.innerHTML = 'Side buttons: ';
- SideButtonsLabel.style.color = 'white';
- SideButtonsLabel.style.fontSize = '15px';
- var BottomButtonLabel = document.createElement('label');
- BottomButtonLabel.innerHTML = 'Bottom button: ';
- BottomButtonLabel.style.color = 'white';
- BottomButtonLabel.style.fontSize = '15px';
- var SideButtonsSliderLabel = document.createElement('label');
- SideButtonsSliderLabel.innerHTML = '⬆️⬇️ position: ';
- SideButtonsSliderLabel.style.color = 'white';
- SideButtonsSliderLabel.style.fontSize = '15px';
- var BottomButtonSliderLabel = document.createElement('label');
- BottomButtonSliderLabel.innerHTML = '⬆️ position: ';
- BottomButtonSliderLabel.style.color = 'white';
- BottomButtonSliderLabel.style.fontSize = '15px';
- //*************************************
- //*** Buttons Position Slider ⬆️⬇️🎚️ ***
- //*************************************
- // Create the TopSideButtonSlider element
- var SideButtonsSlider = document.createElement('input');
- SideButtonsSlider.id = 'SideButtonsSlider';
- SideButtonsSlider.type = 'range';
- SideButtonsSlider.min = '4';
- SideButtonsSlider.max = '96';
- SideButtonsSlider.step = '1';
- SideButtonsSlider.value = '42';
- SideButtonsSlider.style.width = '100px';
- //TopSideButtonSlider.style.marginLeft = '52px';
- // Change blur sliders
- SideButtonsSlider.style.background = '#74e3ff';
- SideButtonsSlider.style.border = 'none';
- SideButtonsSlider.style.height = '5px';
- SideButtonsSlider.style.outline = 'none';
- SideButtonsSlider.style.appearance = 'none';
- SideButtonsSlider.style.webkitAppearance = 'none';
- SideButtonsSlider.style.mozAppearance = 'none';
- SideButtonsSlider.style.msAppearance = 'none';
- SideButtonsSlider.style.webkitSliderThumb = '-webkit-slider-thumb';
- SideButtonsSlider.style.mozSliderThumb = '-moz-slider-thumb';
- SideButtonsSlider.style.msSliderThumb = '-ms-slider-thumb';
- SideButtonsSlider.style.sliderThumb = 'slider-thumb';
- GM.getValue("SideButtonsSliderOption", "").then(function(value) {
- SideButtonsSlider.value = value;
- });
- //***********************************
- //*** Button Position Slider ⬆️🎚️ ***
- //***********************************
- // Create the TopButtonSlider element
- var BottomButtonSlider = document.createElement('input');
- BottomButtonSlider.id = 'BottomButtonSlider';
- BottomButtonSlider.type = 'range';
- BottomButtonSlider.min = '0';
- BottomButtonSlider.max = '95';
- BottomButtonSlider.step = '1';
- BottomButtonSlider.value = '50';
- BottomButtonSlider.style.width = '100px';
- BottomButtonSlider.style.marginLeft = '15px';
- // Change blur sliders
- BottomButtonSlider.style.background = '#74e3ff';
- BottomButtonSlider.style.border = 'none';
- BottomButtonSlider.style.height = '5px';
- BottomButtonSlider.style.outline = 'none';
- BottomButtonSlider.style.appearance = 'none';
- BottomButtonSlider.style.webkitAppearance = 'none';
- BottomButtonSlider.style.mozAppearance = 'none';
- BottomButtonSlider.style.msAppearance = 'none';
- BottomButtonSlider.style.webkitSliderThumb = '-webkit-slider-thumb';
- BottomButtonSlider.style.mozSliderThumb = '-moz-slider-thumb';
- BottomButtonSlider.style.msSliderThumb = '-ms-slider-thumb';
- BottomButtonSlider.style.sliderThumb = 'slider-thumb';
- GM.getValue("BottomButtonSliderOption", "").then(function(value) {
- BottomButtonSlider.value = value;
- });
- //*************************
- //*** Donation 💳 ***
- //*************************
- // Create labels
- var DonationButton = document.createElement('button');
- // Button size
- DonationButton.style.position = 'fixed';
- DonationButton.style.width = '180px';
- DonationButton.style.height = '25px';
- // Button text
- DonationButton.textContent = '💳Please support me!🤗';
- DonationButton.style.fontSize = '10px';
- // Button text style
- DonationButton.style.color = '#303236';
- DonationButton.style.textAlign = 'center';
- DonationButton.addEventListener('click', function() {GM_openInTab("https://...");});
- DonationButton.style.backgroundColor = 'white';
- DonationButton.style.border = '1px solid grey';
- // Button position in panel
- DonationButton.style.position = 'absolute';
- DonationButton.style.left = '50%';
- DonationButton.style.transform = 'translate(-50%, -50%)';
- //*************************
- //*** Panel 🎚️ ***
- //*************************
- // Create the panel
- var panel = document.createElement('div');
- panel.id = 'OptionPanel';
- panel.style.position = 'fixed';
- panel.style.top = '50%';
- panel.style.left = '50%';
- panel.style.transform = 'translate(-50%, -50%)';
- panel.style.backgroundColor = '#303236';
- panel.style.padding = '10px';
- panel.style.border = '1px solid grey';
- panel.style.zIndex = '9999';
- // Append the labels, dropdowns and donation button to the panel
- panel.appendChild(OptionsTitleLabel);
- panel.appendChild(document.createElement('br'));
- panel.appendChild(SideButtonsLabel);
- panel.appendChild(dropdown1);
- panel.appendChild(document.createElement('br'));
- panel.appendChild(BottomButtonLabel);
- panel.appendChild(dropdown2);
- panel.appendChild(document.createElement('br'));
- panel.appendChild(SideButtonsSliderLabel);
- panel.appendChild(SideButtonsSlider);
- panel.appendChild(document.createElement('br'));
- panel.appendChild(BottomButtonSliderLabel);
- panel.appendChild(BottomButtonSlider);
- panel.appendChild(document.createElement('br'));
- panel.appendChild(document.createElement('br'));
- panel.appendChild(DonationButton);
- panel.appendChild(document.createElement('br'));
- // Append the panel to the body
- document.body.appendChild(panel);
- //*********************************************
- //*** Slider Function Value Update 🔄🎚️ ***
- //*********************************************
- // Add an event listener to update the effects when either slider value changes
- document.addEventListener('input', function(event) {
- // Check if the event target is one of the sliders
- const sliders = [SideButtonsSlider, BottomButtonSlider];
- if (sliders.includes(event.target)) {
- TopSideButton.style.top = 'calc(' + SideButtonsSlider.value + '%)';
- BottomSideButton.style.top = 'calc(' + (100 - SideButtonsSlider.value) + '%)';
- BottomButton.style.left = 'calc(' + BottomButtonSlider.value + '%)';
- //Save Sliders Position
- GM.setValue("SideButtonsSliderOption", SideButtonsSlider.value);
- GM.setValue("BottomButtonSliderOption", BottomButtonSlider.value);
- }
- });
- }
- //********************************************************************************************************************
- //*** Listener event 👂 ***
- //********************************************************************************************************************
- //*************************
- //*** Right click 🖱️ ***
- //*************************
- TopSideButton.addEventListener('contextmenu', handleRightClick);
- BottomSideButton.addEventListener('contextmenu', handleRightClick);
- BottomButton.addEventListener('contextmenu', handleRightClick);
- //*************************
- //*** Left click 🖱️ ***
- //*************************
- // Add event listener to hide panel when clicking on the webpage
- document.addEventListener('click', function(event) {
- // Check if the clicked element is the panel or its child elements
- var panel = document.getElementById('OptionPanel');
- var clickedElement = event.target;
- if (panel && !panel.contains(clickedElement)) {
- // Remove the panel from the DOM
- document.body.removeChild(panel);
- }
- });
- })();