TapScroll

By chum54 Last update Mar 12, 2008 — Installed 1,442 times. Daily Installs: 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 5, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2
// ==UserScript==
// @name        TapScroll
// @namespace   http://chum54.blog103.fc2.com/
// @include     *
// @exclude     http://mail.google.com/*
// @version     0.0.2
// ==/UserScript==

(function () {
    var scroll = {
        'h'   : function() { scrollBy(-50, 0) }, // scroll left
        'l'   : function() { scrollBy( 50, 0) }, // scroll right
        'j'   : function() { scrollBy(0,  40) }, // scroll down
        'k'   : function() { scrollBy(0, -40) }, // scroll up
        'n'   : function() { scrollBy(0,  150) }, // scroll down more
        'p'   : function() { scrollBy(0, -150) }, // scroll up more

        'g'   : function() { scrollTo(0, 0) }, // move to page top
        'f'   : function() { history.forward() }, // move to page top
        'b'   : function() { history.back() }, // move to page top
        't'   : function() { toggle_bar() }, // toggle bar

        'd'   : function() { scrollBy(0,  window.innerHeight / 2) },  // scroll half down
        'u'   : function() { scrollBy(0, -window.innerHeight / 2) },  // scroll half up
    };

    var formElement = { 'input':true, 'button':true, 'select':true, 'textarea':true };

    window.addEventListener('keypress',
        function(e) {
            if (e.metaKey || e.ctrlKey || e.altKey ||
                formElement[e.target.tagName.toLowerCase()]) {
                return;
            }
            var key = (e.shiftKey? 'S-' : '') + String.fromCharCode(e.charCode);
            if (scroll[key]) {
                scroll[key]();
                e.preventDefault();
                e.stopPropagation();
            }
        }, false);

    function toggle_bar() {
        if(document.getElementById("tapscroll_bar_down").style.display == "table"){
            //hide("tapscroll_bar_up");
            hide("tapscroll_bar_down");
        }else {
            //show("tapscroll_bar_up");
            show("tapscroll_bar_down");
        }
    }

    function hide(id){
        document.getElementById(id).style.display = "none";
    }
    function show(id){
        document.getElementById(id).style.display = "table";
    }

    // ignore inner frame
    if (String(window.frameElement).indexOf('HTMLIFrameElement') < 0){
        focus();

        // Page up
        //pageup=document.createElement("div");
        //pageup.innerHTML="<table id=\"tapscroll_bar_up\" style=\"display:table;width:120%;position:fixed;top:0px;left:-8%;background-color:#e0e0e0;opacity:0.3;text-align:center;border-collapse:collapse;z-index:100;\"><tr><td style=\"text-align:center;padding:1.5em 0em;width:40%;\" onMouseDown=\"scrollBy(0,-150);\">UP</td></tr></table>";
        //document.body.appendChild(pageup);

        // Page down and top
        pagedown=document.createElement("div");
        pagedown.innerHTML="<table id=\"tapscroll_bar_down\" style=\"display:table;width:120%;position:fixed;bottom:0px;left:-8%;background-color:#e0e0e0;opacity:0.3;text-align:center;border-collapse:collapse;z-index:100;\"><tr><td style=\"text-align:center;padding:1.5em 0em;width:40%;\" onMouseDown=\"scrollBy(0,150);\">DOWN</td><td style=\"width:10%; background-color:#5d8eff;\" onMouseDown=\"scrollTo(0,0);\">TOP</td><td style=\"text-align:center;width:40%;\" onMouseDown=\"scrollBy(0,150);\">DOWN</td></tr></table>";
        document.body.appendChild(pagedown);
    }

})();