// ==UserScript== // @name Jupyter Notebook滚动到顶部 // @namespace http://tampermonkey.net/ // @version 1.1 // @description Add a scroll-to-top button to Jupyter Notebook's content area // @author anyphasy // @icon http://mms0.baidu.com/it/u=1832809539,667447038&fm=253&app=138&f=JPEG?w=121&h=121 // @match http://localhost:8888/notebooks/* // @grant GM_addStyle // ==/UserScript== (function() { 'use strict'; // 添加自定义CSS样式 GM_addStyle(` #jupyterScrollTopBtn { position: fixed; top: 15%; left: 10px; z-index: 9999; background-color: #2196F3; color: white; border: none; border-radius: 50%; width: 40px; height: 40px; font-size: 20px; cursor: pointer; box-shadow: 0 2px 5px rgba(0,0,0,0.3); transition: all 0.3s; display: flex; align-items: center; justify-content: center; } #jupyterScrollTopBtn:hover { background-color: #0b7dda; transform: scale(1.1); } #jupyterScrollTopBtn.hidden { opacity: 0; pointer-events: none; } `); // 等待页面加载完成 function init() { const siteDiv = document.getElementById('site'); if (!siteDiv) { setTimeout(init, 500); return; } // 创建按钮 const btn = document.createElement('div'); btn.id = 'jupyterScrollTopBtn'; btn.innerHTML = '↑'; btn.className = 'hidden'; document.body.appendChild(btn); // 点击事件处理 btn.addEventListener('click', () => { siteDiv.scrollTo({ top: 0, behavior: 'instant' }); }); // 滚动事件监听 siteDiv.addEventListener('scroll', () => { if (siteDiv.scrollTop > 300) { btn.classList.remove('hidden'); } else { btn.classList.add('hidden'); } }); } // 延迟初始化以确保元素加载完成 setTimeout(init, 1000); })();