您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
一个简单的鼠标手势脚本
- // ==UserScript==
- // @name My Mouse Gestures
- // @name:zh-CN 我的鼠标手势
- // @name:zh-TW 我的滑鼠手勢
- // @description A simple mouse gesture script
- // @description:zh-CN 一个简单的鼠标手势脚本
- // @description:zh-TW 一個簡單的滑鼠手勢腳本
- // @version 0.2.2
- // @match *://*/*
- // @run-at document-start
- // @grant GM_openInTab
- // @grant window.close
- // @grant GM_setValue
- // @grant GM_getValue
- // @namespace https://greasyfork.org/users/4968
- // ==/UserScript==
- // --- Settings ---
- const SENSITIVITY = 3; // 1 ~ 5
- const TOLERANCE = 3; // 1 ~ 5
- const funcs = {
- 'U': () => window.scrollTo(0, 0),
- 'D': () => window.scrollTo(0, 1073741824),
- 'L': () => window.history.back(),
- 'R': () => window.history.forward(),
- 'DR': () => window.top.close(),
- 'UD': () => window.location.reload(),
- 'RU': () => {
- GM_openInTab('about:newtab', false);
- if (navigator.userAgent.indexOf('Firefox') !== -1) {
- GM_openInTab('about:blank', false);
- }
- },
- 'RL': () => {
- let closedTabs = GM_getValue("closedTabs", []);
- if (closedTabs.length > 0) {
- let lastclosedTab = closedTabs.pop();
- GM_setValue("closedTabs", closedTabs);
- GM_openInTab(lastclosedTab, false);
- }
- }
- };
- // ----------------
- const s = 1 << ((7 - SENSITIVITY) << 1);
- const t1 = Math.tan(0.15708 * TOLERANCE);
- const t2 = 1 / t1;
- const abs = Math.abs;
- let x, y, path, lastGesture;
- const tracer = function (e) {
- const { clientX: cx, clientY: cy } = e;
- const dx = cx - x;
- const dy = cy - y;
- const distance = dx ** 2 + dy ** 2;
- if (distance > s) {
- const slope = abs(dy / dx);
- let direction = '';
- if (slope > t1) {
- direction = dy > 0 ? 'D' : 'U';
- } else if (slope <= t2) {
- direction = dx > 0 ? 'R' : 'L';
- }
- if (lastGesture !== direction) {
- lastGesture = direction;
- path += direction;
- }
- x = cx;
- y = cy;
- }
- };
- window.addEventListener('mousedown', function (e) {
- if (e.button === 2) {
- x = e.clientX;
- y = e.clientY;
- path = "";
- lastGesture = "";
- window.addEventListener('mousemove', tracer, false);
- }
- }, false);
- window.addEventListener('contextmenu', function (e) {
- window.removeEventListener('mousemove', tracer, false);
- if (path !== "") {
- e.preventDefault();
- if (funcs.hasOwnProperty(path)) {
- funcs[path]();
- }
- }
- }, false);
- window.addEventListener("beforeunload", () => {
- let closedTabs = GM_getValue("closedTabs", []).slice(-10);
- closedTabs.push(window.location.href);
- GM_setValue("closedTabs", closedTabs);
- });