您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
使用j/k对应上下滚动; d/u对应上下翻页; gg/G对应到页首页尾
当前为
- // ==UserScript==
- // @name Vim-like Navigation
- // @name:zh-CN Vim键位导航
- // @namespace http://tampermonkey.net/
- // @version 1.1
- // @description Use (h,j,k,l) to scroll around. gg to go to top G to to bottom
- // @description:zh-cn 使用j/k对应上下滚动; d/u对应上下翻页; gg/G对应到页首页尾
- // @author Max Schulte
- // @license MIT
- // @match http*://*
- // @match *://*/*
- // @match *
- // @grant none
- // ==/UserScript==
- (function() {
- 'use strict';
- // Your code here...
- var keyLog = []
- document.onkeypress = function (e) {
- // if user is typing inside of a text box return
- var nodeName = e.target.nodeName
- if ( nodeName == 'INPUT' || nodeName == 'TEXTAREA' ) return;
- // event
- e = e || window.event;
- // horizontal and vertical
- var h = 0;
- var v = 0;
- // scroll amount
- keyLog.push(e.keyCode)
- // console.log(keyLog)
- var sa = 100;
- switch (e.keyCode){
- case 104: // h
- h -= sa;
- keyLog = [];
- break;
- case 106: // j
- v += sa;
- keyLog = [];
- break;
- case 107: // k
- v -= sa;
- keyLog = [];
- break;
- case 108: // l
- h += sa;
- keyLog = [];
- break;
- case 100: // d
- v = v + sa + 300;
- keyLog = [];
- break;
- case 117: // u
- v = v - sa - 300;
- keyLog = [];
- break;
- case 120: // x
- closeTab()
- window.close()
- break;
- case 103: // gg
- if (keyLog[keyLog.length-2] != 103) {
- break;
- }
- keyLog = [];
- scrollSmoothTo(0);
- return;
- case 71: // G
- scrollSmoothTo(document.documentElement.scrollHeight)
- keyLog = [];
- return;
- default:
- keyLog = [];
- break;
- }
- // window.scrollBy(h, v);
- var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
- scrollSmoothTo(v + scrollTop)
- };
- })();
- var scrollSmoothTo = function (position) {
- if (!window.requestAnimationFrame) {
- window.requestAnimationFrame = function(callback, element) {
- return setTimeout(callback, 17);
- };
- }
- // 当前滚动高度
- var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
- // 滚动step方法
- var step = function () {
- // 距离目标滚动距离
- var distance = position - scrollTop;
- // 目标滚动位置
- scrollTop = scrollTop + distance / 5;
- if (Math.abs(distance) < 1) {
- window.scrollTo(0, position);
- } else {
- window.scrollTo(0, scrollTop);
- requestAnimationFrame(step);
- }
- };
- step();
- };