2012-04-13 126 views
1

我有一个页面,用户在其中单击一个链接开始自动向下滚动页面以便于阅读。用户点击另一个链接来停止滚动。前者完美地工作,但后者使页面跳回顶部点击,而不是停止滚动页面上的那个地方。有任何想法吗?自动滚动:停止跳回页首

function pageScroll() { 
    window.scrollBy(0,1); // horizontal and vertical scroll increments 
    scrolldelay = setTimeout('pageScroll()',50); // scrolls every 100 milliseconds 
} 
function stopScroll() { 
    clearTimeout(scrolldelay); 
} 

我尝试添加return false;从东西我在另一篇文章读第二个功能,但它并没有帮助。无论如何,我不完全理解返回的使用。谢谢你的帮助。

+0

您的'scrolldelay'变量不能在另一个函数中访问。 – hjpotter92 2012-04-13 11:16:16

+0

为什么@ChasingDeath对我来说似乎是全球性的。 – epascarello 2012-04-13 11:17:48

+0

嘿@preahkumpii,显示你如何调用这些函数。控制台中是否有任何错误? – epascarello 2012-04-13 11:17:54

回答

8

我假设你正在做这样的事情:

<a href="#" onclick="pageScroll();">start</a> 
<a href="#" onclick="stopScroll();">stop</a> 

最快的解决方法是从onclick事件处理程序返回false,像这样:

<a href="#" onclick="pageScroll(); return false;">start</a> 
<a href="#" onclick="stopScroll(); return false;">stop</a> 

的想法是停止浏览器不执行事件的默认操作(在这种情况下,将滚动到页面顶部的#)。现在,更现代的方法是绑定事件处理函数,然后使用e.preventDefault(),但return false;仍适用于旧式事件属性。

+0

欣赏答案。完美工作。我理解你说的不允许链接转到默认动作,但是'return false'如何防止呢? – preahkumpii 2012-04-13 11:47:16

+0

没有真正的“原因”,但历史上,DOM允许事件处理程序取消默认操作(在引入'.preventDefault()之前)的一种方式是从处理函数返回false(在这种情况下,处理函数是'onclick'字符串。 – 2012-04-13 11:48:53

+0

哎呀,谢谢。 – preahkumpii 2012-04-13 11:51:20