My Mouse Gestures

A simple mouse gesture script

2014-10-17 या दिनांकाला. सर्वात नवीन आवृत्ती पाहा.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey, Greasemonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

You will need to install an extension such as Tampermonkey to install this script.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्क्रिप्ट व्यवस्थापक एक्स्टेंशन इंस्टॉल करावे लागेल.

(माझ्याकडे आधीच युझर स्क्रिप्ट व्यवस्थापक आहे, मला इंस्टॉल करू द्या!)

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

(माझ्याकडे आधीच युझर स्टाईल व्यवस्थापक आहे, मला इंस्टॉल करू द्या!)

// ==UserScript==
// @name           My Mouse Gestures
// @description    A simple mouse gesture script
// @version        0.1.1
// @include        *
// @run-at         document-start
// @grant          GM_openInTab
// @noframes
// @namespace      https://greasyfork.org/users/4968
// ==/UserScript==


// --- Settings ---

var SENSITIVITY = 3; // 1 ~ 5
var TOLERANCE = 3; // 1 ~ 5

var funcs = {
    'DR': function() {
        window.top.close();
    },
    'U': function() {
        window.scrollTo(0, 0);
    },
    'D': function() {
        window.scrollTo(0, 1073741824);
    },
    'L': function() {
        window.history.back();
    },
    'R': function() {
        window.history.forward();
    },
    'RU': function() {
        GM_openInTab('about:newtab', false);
    },
    'UD': function() {
        window.location.reload();
    }
};

// ----------------


var s = 1 << ((7 - SENSITIVITY) << 1);
var t1 = Math.tan(0.15708 * TOLERANCE),
    t2 = 1 / t1;

var x, y, path;

function tracer(e) {
    var cx = e.clientX,
        cy = e.clientY,
        deltaX = cx - x,
        deltaY = cy - y,
        slope = Math.abs(deltaY / deltaX),
        distance = deltaX * deltaX + deltaY * deltaY,
        direction = '';
    if (distance > s) {
        if (slope > t1) {
            if (deltaY > 0) {
                direction = 'D';
            } else {
                direction = 'U';
            }
        } else if (slope <= t2) {
            if (deltaX > 0) {
                direction = 'R';
            } else {
                direction = 'L';
            }
        }
        if (path.slice(-1) != direction) {
            path += direction;
        }
        x = cx;
        y = cy;
    }
}

window.addEventListener('mousedown', function(e) {
    if (e.which == 3) {
        x = e.clientX;
        y = e.clientY;
        path = "";
        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);