Firefox をある程度の単位で上下
今さらながらに Greasemonkey とか便利なんじゃないかとか思いはじめていたりするんですけど。でも便利だけど書いてて楽しくないよねとか。要するに役に立つものはツマらない教の信者だというだけですけど。
なんとなくはてなブックマークで j とか k とか押してみたところ、項目単位でスクロールできることに気付いて、あーコレ gmail でもあったけど他でも結構使いたいかもなぁとか思って、既出予感ひしひしながらも、なんとなくスクロールする単位を検出してなんとなく上下にスクロールするスクリプトを書きました。人狼BBSだの四国だのの発言単位スクロールとかもできるとか。
はてなアンテナの JS をチラチラ見させていただいたのと、 getElementPositionY は http://d.hatena.ne.jp/ghostbass/20060718/1153228402 を参考にさせていただきました。
使いかたとかはよく知りません。私は ~/wrk/js/scroll_sections.js とかに保存して、 keyconfig と functions for keyconfig を使って、
f4kc_LoadSubScript("file:///home/i/wrk/js/scroll_sections.js"); initSections(); scrollSectionDown();
とかを Shift+J とかに割当ててるみたいです。以下ソース。
function getElementPositionY(e) { var y = 0; while (e.offsetTop) { y += e.offsetTop; e = e.offsetParent; } return y; } function comparePos(a, b) { return a - b; } var sects = new Array(); function initSections() { var document = _f4kcGetFocusedWindow().document; var sectElems = ['h1', 'h2', 'h3', 'h4', 'tr', 'li']; var i = 0; for (var j = 0; j < sectElems.length; j++) { var ns = document.getElementsByTagName(sectElems[j]); for (var k = 0; k < ns.length; k++) { sects[i] = getElementPositionY(ns[k]); i++; } if (sects.length > 9) break; } sects.sort(comparePos); } function scrollSectionDown() { var up = _f4kcGetFocusedWindow().pageYOffset; for (var i = 0; i < sects.length-1; i++) { if (up < sects[i]) { _f4kcGetFocusedWindow().scroll(0, sects[i]); return; } } } function scrollSectionUp() { var up = _f4kcGetFocusedWindow().pageYOffset; for (var i = sects.length-1; i > 0; i--) { if (up > sects[i]) { _f4kcGetFocusedWindow().scroll(0, sects[i]); return; } } }