leonary
千年狐狸
千年狐狸
  • UID4095
  • 注册日期2005-03-16
  • 最后登录2016-12-24
  • 发帖数1908
  • 经验11枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 社区居民
阅读:7708回复:4

低速自动滚屏的greasemonkey脚本

楼主#
更多 发布于:2006-06-01 21:50
2006.8.24更新
看了Triton同学的脚本,学会了处理键盘消息。这次更新就是增加了键盘控制的功能,在自动滚屏的状态下按"下"可以增加滚屏速度,按"上"是降低速度。

下面的代码加了中文注释,注意不要直接用在原版greasemonkey上。想偷懒的直接下载附件里面的,没有中文

2006.6.1
看电子书时希望能够自动滚屏,但是单击中键那个自动滚屏速度太快,就写了一个脚本实现这个功能。

把下面代码保存在一个文本当中,然后改名为autoscroll.user.js,用FF打开、安装。在运行脚本的页面,单击左键就开始滚动,再点击一次就停止。

在脚本里我添加了自己的电子书路径,需要在别的路径运行脚本可以直接修改@include那一行,或者在greasemonkey里面也可以设置。

// ==UserScript==
// @name          autoscroll
// @namespace     http://diveintomark.org/projects/greasemonkey/
// @description   autoscroll page
// @include       file:///E:/Nalch's/EBook/*
// ==/UserScript==

window.isScroll = false;
// 如果在about:config里面读取滚动速度失败则新建一个值
if (GM_getValue('scrollrate', 0) <= 0)
{
   GM_setValue('scrollrate', 100);
}
// 响应鼠标点击
document.addEventListener('click', function(event) {
      if (window.isScroll == false){
      window.intervalID = window.setInterval("window.scrollBy(0, 1)", GM_getValue('scrollrate', 100));
      window.isScroll = true;
   }
   else{
      window.clearInterval(window.intervalID);
      window.isScroll = false;
   }
    event.stopPropagation();
    event.preventDefault();
}, true);

// 响应键盘按键
document.addEventListener("keydown", adjustspeed,true);

function adjustspeed(event)
{
    if (window.isScroll == true)
    {
        if (event.keyCode == 40)         // "下"的键码是40
        {
            var rate = GM_getValue('scrollrate', 100);
            if (rate > 15)
            {
                window.clearInterval(window.intervalID);
                var rat = rate - 10;                // 每次按"下"把scrollrate减少10,加速
                GM_setValue('scrollrate', rat);
                window.intervalID = window.setInterval("window.scrollBy(0, 1)", GM_getValue('scrollrate', 100));
              //  alert(GM_getValue('scrollrate', 100));
            }
            
        }

        if (event.keyCode == 38)          // "上"的键码是38
        {
            window.clearInterval(window.intervalID);
            var rate = GM_getValue('scrollrate', 100);
            var rat = rate + 25;                // 每次按"上"把scrollrate增加25,减速
            GM_setValue('scrollrate', rat);
            window.intervalID = window.setInterval("window.scrollBy(0, 1)", GM_getValue('scrollrate', 100));
      //      alert(GM_getValue('scrollrate', 100));
        }
    }
    
}

原本希望能够通过键盘调节速度,还没找到办法;目前只能通过修改about:config中下面这个键值改变速度。注意滚动速度跟这项值成反比
greasemonkey.scriptvals.http://diveintomark.org/projects/greasemonkey//autoscroll.scrollrate

目前还有一个bug没解决:如果将速度那项重置为空,将造成脚本无法正确运行。

下面说说关于写JS的一些感想,想学编脚本的可以看看:
学过一点其他编程语言的话,JS的语法肯定不成问题,不行的话看看这里的JS语法规范。开始编写脚本,我觉得最有用的资料就是wiki里面的深入Greasemonkey官方文档Gecko DOM Reference,前者是一些编写技巧,后者是Gecko支持的函数之类的。基本上把"深入GM"的前三章看完就可以参考DOM文档开始照猫画虎了 需要注意的就是wiki里面2.3节讲的函数、变量生命周期的问题。

这个是我写的第一个脚本,有什么不顺眼的大家多多指教啊
附件名称/大小 下载次数 最后更新
autoscroll.user.zip (1KB)  553 2006-08-24 22:36
再狡猾的猎手也斗不过好狐狸
lickyc
小狐狸
小狐狸
  • UID7445
  • 注册日期2005-07-20
  • 最后登录2009-08-13
  • 发帖数41
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
1楼#
发布于:2006-06-01 21:50
不错。。谢谢
hnstxx
千年狐狸
千年狐狸
  • UID1952
  • 注册日期2005-01-09
  • 最后登录2013-05-14
  • 发帖数4977
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
2楼#
发布于:2006-06-01 21:50
很少看电子书籍,不过这个功能看起来很不错哦。
MM:你是个外表冷酷,内心却很甜蜜的男人。
leonary
千年狐狸
千年狐狸
  • UID4095
  • 注册日期2005-03-16
  • 最后登录2016-12-24
  • 发帖数1908
  • 经验11枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 社区居民
3楼#
发布于:2006-06-01 21:50
更新啦 更新啦
再狡猾的猎手也斗不过好狐狸
hnstxx
千年狐狸
千年狐狸
  • UID1952
  • 注册日期2005-01-09
  • 最后登录2013-05-14
  • 发帖数4977
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
4楼#
发布于:2006-06-01 21:50
顶一下!
MM:你是个外表冷酷,内心却很甜蜜的男人。
游客

返回顶部