Не уверен, что это лучший способ сделать это, но он отлично работает, красиво и ясно :
function scrollByRate(y, rate)
{
//calculate the scroll height
var scrolling = Math.max(document.getElementsByTagName('html')[0].scrollTop, document.body.scrollTop);
//save the old value as "static" var
arguments.callee.tmp = arguments.callee.tmp || scrolling + y;
//make a little scrolling step
window.scrollBy(0, (arguments.callee.tmp - scrolling)/rate);
//are we arrived? if no, keep going recursively, else reset the static var
if(arguments.callee.tmp - scrolling > 100) setTimeout(function() { scrollByRate(y, rate); }, 10);
else arguments.callee.tmp = undefined;
}
Тогда ваш OnClick будет как:
<a href="javascript:void(0);" onclick="scrollByRate(1000,20)">Scrolling down slowly</a>
Попробуйте здесь
function scrollByRate(y, rate) {
var scrolling = Math.max(document.getElementsByTagName('html')[0].scrollTop, document.body.scrollTop);
arguments.callee.tmp = arguments.callee.tmp || scrolling + y;
window.scrollBy(0, (arguments.callee.tmp - scrolling)/rate);
if(arguments.callee.tmp - scrolling > 100) setTimeout(function() { scrollByRate(y, rate); }, 10);
else arguments.callee.tmp = undefined;
}
p {
height:100px;
}
<p>
<a href="javascript:void(0);" onclick="scrollByRate(500,20)">Scrolling down slowly</a>
</p>
<p>a</p>
<p>b</p>
<p>c</p>
<p>d</p>
<p>e</p>
<p>f</p>
<p>g</p>
<p>h</p>
<p>i</p>
<p>l</p>
Read here статическому вар в JavaScript
Возможный дубликат [Cross браузер JavaScript (не JQuery ...) свитка к началу анимации] (http://stackoverflow.com/questions/8917921/cross-browser-javascript-not-jquery-scroll-to-top-animation) –
Да, но кнопка находится в середине страницы, и я хочу, чтобы она была croll 300px вниз, без какого-либо идентификатора. – kloshar4o
В демо в вопросе используется кнопка для выполнения прокрутки кода анимации. Вы можете взять этот код и использовать его где-нибудь еще в своем проекте. –