2012-06-05 51 views
0

我试图在GreaseMonkey中制作一个玩具脚本,当我点击一个按钮时会导致我的屏幕反复跳到屏幕的顶部,并且当我再次单击该按钮时停止跳跃。Greasemonkey脚本似乎忽略了setInterval?

这是我的代码:

var perpetualScroll = function() { 
    var scrolling = false; 

    var scroll = function() { 
     if (scrolling) { 
      window.scrollTo(0, 0); 
     } 
    }; 

    var scrollDiv = document.createElement("div"); 
    scrollDiv.id = "topScroll0x2a"; 
    scrollDiv.innerHTML = '<a class="topScroll" onclick="scrolling = !scrolling;" style="display:block; position:fixed; bottom: 1em; right: 1em; color:#fff; background-color:#000; padding:.5em;" href="#">Start scroll</a>'; 
    document.body.appendChild(scrollDiv); 

    var intervalId = window.setInterval(scroll, 50); 
}; 

perpetualScroll(); 

当我点击下角的脚本创建,它跳转到屏幕的顶部,但不会持续永远这样做的按钮。

我对Javascript和GreaseMonkey非常陌生,所以我不太清楚问题在哪。我怀疑这可能是由于链接的onclick部分存在问题,但如果是这样,我似乎无法弄清楚。

回答

1

这样做onclick就像你所期望的那样工作。你的innerHTML只是一个字符串,所以JS不知道它的范围在perpetualScroll函数中。

onclick处理程序,它串在全球范围内进行评估,所以你有什么是相同的:

window.scrolling = !window.scrolling; 

你想要的scrolling变量是不同的。

您应该创建一个实际的功能是这样的:

var a = document.createElement('a'); 
a.className = (a.className || "") + ' topScroll'; 
a.style.display = 'block'; 
a.style.position = 'fixed'; 
a.style.bottom = '1em'; 
a.style.right = '1em'; 
a.style.color = '#FFF'; 
a.style.backgroundColor = '#000'; 
a.style.padding = '0.5em'; 
a.href = '#'; 
a.onclick = function(e){ 
    scrolling = !scrolling; 
    return false; 
}; 
scrollDiv.appendChild(a); 

显然设置,CSS是可怕的,所以你应该真正把在一个单独的样式表反正。

+0

哦,这看起来好像是一个更好的方法。我不知道你可以做像'a.style.blah'这样的东西,谢谢! (是的,我会做一个单独的样式表,但我感觉很懒:D) – Michael0x2a