您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
scroll to top
当前为
- // ==UserScript==
- // @name Back to top
- // @namespace cyyyu
- // @version 0.3
- // @description scroll to top
- // @author Chuang Yu
- // @match https://*/*
- // @grant none
- // @run-at document-end
- // ==/UserScript==
- (function() {
- 'use strict';
- /* written in es5 */
- var rootNode = document.querySelector("html")
- var prevLocations = new Map() // node: number
- var timers = new Map() // node: number
- var backToPrevLocationDelay = 10000 // 10s
- rootNode.addEventListener("dblclick", function (evt) {
- var path = evt.path
- for (var i = 0; i < path.length; i++) {
- var node = path[i]
- if (!isScrollable(node)) continue;
- if (!evt.altKey) return
- if (!isAtTop(node)) {
- clearTimeout(timers.get(node))
- scrollTo(node, 0)
- } else if (prevLocations.has(node)) {
- scrollTo(node, prevLocations.get(node))
- }
- }
- })
- function isAtTop(node) {
- return node.scrollTop === 0
- }
- function scrollTo(node, top) {
- var prevScrollBehavior = node.style.scrollBehavior
- var prevLocation = node.scrollTop
- node.style.scrollBehavior = "smooth"
- node.scrollTop = top
- node.style.scrollBehavior = prevScrollBehavior
- if (top === 0) {
- prevLocations.set(node, prevLocation)
- var timer = setTimeout(
- function () { prevLocations.delete(node) },
- backToPrevLocationDelay
- )
- timers.set(node, timer)
- }
- }
- function isScrollable(node) {
- return (
- (node.scrollHeight - node.clientHeight > 100) &&
- (node.clientHeight > 50)
- )
- }
- })();