您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Makes the audio player on NYT articles float on scroll in the bottom center.
// ==UserScript== // @name NYT Floating Audio Player // @namespace http://tampermonkey.net/ // @license MIT // @version 1.4 // @description Makes the audio player on NYT articles float on scroll in the bottom center. // @author Bao // @match https://www.nytimes.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=nytimes.com // @grant GM_addStyle // ==/UserScript== (function() { 'use strict'; // This is the CSS that will be applied to the audio player when it floats. // We use GM_addStyle to inject it into the page. GM_addStyle(` .floating-audio-player { position: fixed !important; bottom: 20px; left: 50%; transform: translateX(-50%); /* This horizontally centers the element */ width: 600px; max-width: 90vw; /* Ensures it fits on smaller screens */ background-color: white; z-index: 10000; /* A high z-index to ensure it's on top */ padding: 15px; border-radius: 8px; /* Added rounded corners */ border: 1px solid #e2e2e2; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); /* Enhanced shadow for better visibility */ transition: all 0.3s ease-in-out; /* Smooth transition */ } `); // We store the original position of the player here. let playerOriginalOffsetTop = 0; // This selector targets the specific div that contains the audio player controls // and the share buttons, ensuring the entire bar floats. const audioPlayer = document.querySelector('.css-qznc1j'); // If there's no audio player on the page, we don't need to do anything else. if (!audioPlayer) { console.log("NYT Floating Audio Player: No audio player found on this page."); return; } // A small delay to ensure the page has fully loaded and we get the correct original position. setTimeout(() => { if (audioPlayer) { playerOriginalOffsetTop = audioPlayer.offsetTop; } }, 500); // This function runs every time the user scrolls. function handleScroll() { // If we haven't found the player or its position yet, do nothing. if (!audioPlayer || playerOriginalOffsetTop === 0) { return; } // Check if the user's scroll position is past the player's original position. if (window.scrollY > playerOriginalOffsetTop) { // If so, add the floating class. audioPlayer.classList.add('floating-audio-player'); } else { // Otherwise, remove it. audioPlayer.classList.remove('floating-audio-player'); } } // Listen for the 'scroll' event on the window. window.addEventListener('scroll', handleScroll); })();