您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Enable scroll mode for touchpad/mouse without/missing scroll/middle button when Ctrl + Space or Ctrl + Shift and touchpad/left touchpad button/left mouse button are pressed. Text selection is enabled for Ctrl + Shift.
当前为
- // ==UserScript==
- // @name Scroll mode for touchpad/mouse without/missing scroll/middle button
- // @author NWP
- // @description Enable scroll mode for touchpad/mouse without/missing scroll/middle button when Ctrl + Space or Ctrl + Shift and touchpad/left touchpad button/left mouse button are pressed. Text selection is enabled for Ctrl + Shift.
- // @namespace https://greasyfork.org/users/877912
- // @version 0.1
- // @license MIT
- // @match *://*/*
- // @grant none
- // ==/UserScript==
- (function() {
- 'use strict';
- // Sensitivity factor determines the scroll speed relative to mouse movement.
- // A higher value results in faster scrolling, while a lower value makes the scrolling slower.
- // Example:
- // - If sensitivity = 1.0, moving the mouse 100 pixels will scroll 100 pixels.
- // - If sensitivity = 0.5, moving the mouse 100 pixels will scroll 50 pixels.
- const sensitivity = 0.5;
- let scrollModeEnabled = false;
- let selectModeEnabled = false;
- let initialMouseY = 0;
- let scrollSpeed = 0;
- let scrollInterval = null;
- document.addEventListener('keydown', function(event) {
- if (event.ctrlKey && event.code === 'Space' && !scrollModeEnabled) {
- scrollModeEnabled = true;
- document.body.style.cursor = 'ns-resize'; // Indicate scroll mode is active
- disableTextSelection();
- }
- if (event.ctrlKey && event.shiftKey && !selectModeEnabled) {
- selectModeEnabled = true;
- document.body.style.cursor = 'ns-resize'; // Indicate select mode is active
- enableTextSelection();
- }
- });
- document.addEventListener('keyup', function(event) {
- // Check specific keyup events to exit scroll mode
- if (event.code === 'Space' || event.code === 'ControlLeft' || event.code === 'ControlRight') {
- exitScrollMode();
- }
- // Check specific keyup events to exit select mode
- if (event.code === 'ShiftLeft' || event.code === 'ShiftRight' || event.code === 'ControlLeft' || event.code === 'ControlRight') {
- exitSelectMode();
- }
- });
- document.addEventListener('mousedown', function(event) {
- if (scrollModeEnabled && event.button === 0) {
- initialMouseY = event.clientY; // Set initial position for scroll calculation
- startAutoScroll();
- }
- if (selectModeEnabled && event.button === 0) {
- initialMouseY = event.clientY; // Set initial position for scroll calculation
- startAutoScroll();
- }
- });
- document.addEventListener('mouseup', function(event) {
- if (event.button === 0) {
- exitScrollMode();
- exitSelectMode();
- }
- });
- document.addEventListener('mousemove', function(event) {
- if ((scrollModeEnabled || selectModeEnabled) && scrollInterval) {
- let currentMouseY = event.clientY;
- scrollSpeed = (currentMouseY - initialMouseY) * sensitivity;
- }
- });
- function startAutoScroll() {
- if (!scrollInterval) {
- scrollInterval = setInterval(function() {
- window.scrollBy(0, scrollSpeed); // Scroll based on current calculated speed
- }, 50);
- }
- }
- function stopAutoScroll() {
- if (scrollInterval) {
- clearInterval(scrollInterval);
- scrollInterval = null;
- }
- }
- function exitScrollMode() {
- if (scrollModeEnabled) {
- scrollModeEnabled = false;
- scrollSpeed = 0;
- document.body.style.cursor = 'default';
- enableTextSelection(); // Ensure text selection is enabled again
- stopAutoScroll();
- }
- }
- function exitSelectMode() {
- if (selectModeEnabled) {
- selectModeEnabled = false;
- scrollSpeed = 0;
- document.body.style.cursor = 'default';
- stopAutoScroll();
- }
- }
- function disableTextSelection() {
- document.body.style.userSelect = 'none';
- document.body.style.webkitUserSelect = 'none';
- document.body.style.msUserSelect = 'none';
- document.body.style.mozUserSelect = 'none';
- }
- function enableTextSelection() {
- document.body.style.userSelect = '';
- document.body.style.webkitUserSelect = '';
- document.body.style.msUserSelect = '';
- document.body.style.mozUserSelect = '';
- }
- })();