2011-02-09 3 views
3

Привет Я использую следующий метод программно прокручивать веб-документ:Анимационные окно прокрутки

window.scrollBy(0, delta) 

Текущая реализация scrollBy просто перескакивает документ в новое положение. Есть ли способ оживить это? Я использую webkit специально, и jQuery (или любая другая инфраструктура javascript) не является вариантом.

Благодарим за любую помощь заранее.

+0

Независимо от причины для изобретать колесо, вы можете посмотреть, как установленные рамки реализации гладкой анимации , и учиться от этого, нет? – Thomas

+1

@Thomas: Поскольку Webkit предлагает анимацию CSS с ослаблением, неправдоподобно думать, что подобный собственный механизм может быть доступен для прокрутки (что не соответствует AFAIK) – user123444555621

ответ

12

Вы можете просто оживить его, вызывая интервал:

setInterval(function() { 
    window.scrollBy(0, 5); 
}, 13); 

Это, конечно, будет делать это снова и снова, так что вам нужно поставить в условной проверки, когда нужно отменить интервал. Может выглядеть следующим образом:

var timerID = setInterval(function() { 
    window.scrollBy(0, 5); 

    if(window.pageYOffset >= 500) 
     clearInterval(timerID); 
}, 13); 
+0

Прохладное, лучшее решение до сих пор. Я надеялся на что-то более сложное, как непринужденность. –

+0

@ darren: Я боюсь, что ванильный javascript не предложит смягчений. Это по своему усмотрению. – jAndy

+0

Я был в идеале надеясь, что было скрытое преобразование webkit, которое я мог бы применить к окну. ScrollBy stuff :) –

0

Каждый раз, когда эта функция вызывается, он будет прыгать количество пикселей в window.scrollBy (0,5), независимо от того, где находится pageYOffset. Например, если pageYOffset 300px, он перейдет на 305px.

, но эта проблема может быть решена, перемещая если и добавив еще
так:

var timerID = setInterval(function() { 
    if(window.pageYOffset <= 500) 
     window.scrollBy(0, 5); 

    else 
     clearInterval(timerID); 
}, 1); 
Смежные вопросы