2012-04-13 130 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