2012-04-13 4 views
1

У меня есть страница, на которой пользователь нажимает одну ссылку, чтобы начать прокрутку страницы автоматически для удобства чтения. Существует еще одна ссылка, которую пользователь нажимает, чтобы остановить прокрутку. Первое работает отлично, но последнее заставляет страницу прыгать назад, когда она нажата, а не останавливать прокрутку в том месте на странице. Есть идеи?auto scroll: stop jump back to top of page

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

+0

Почему @ChasingDeath кажется мне глобальным. – epascarello

+0

Эй, @preahkumpii, покажите, как вы называете эти функции. Есть ли ошибки в консоли? – epascarello

ответ

8

Я предполагаю, что вы делаете что-то вроде этого:

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

Самый быстрый Фикс вернуть ложь от onclick обработчиков событий, например:

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

Идея заключается в том, чтобы остановить браузер выполнит действие по умолчанию для события (в этом случае, перейдя на #, который прокручивается вверху страницы). В настоящее время более современный способ заключается в привязке функции обработчика событий, затем в нем используется e.preventDefault(), но return false; по-прежнему работает для атрибутов событий старого стиля.

+0

Оцените ответ. Работала отлично. Я понимаю, что вы сказали о том, что не позволяете ссылке перейти к действию по умолчанию, но как это сделать? – preahkumpii

+0

На самом деле нет «причины», но один из способов, который исторически, DOM позволяет обработчикам событий отменять действие по умолчанию (до появления '.preventDefault()') - вернуть false из функции обработчика (в этом случае , функция обработчика - строка 'onclick'. –

+0

Gotcha, спасибо. – preahkumpii