2009-05-07 3 views
90

Я пытаюсь прокручивать вниз 100 пикселей каждый раз, когда пользователь приближается к верхней части документа.

У меня есть функция, выполняемая, когда пользователь приближается к верхней части документа, но функция .scrollTo не работает.

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

alert("starting"); 
$.scrollTo({ top: '+=100px', left: '+=0px' }, 800); 
alert("finished"); 

Я знаю, что у меня есть страница jquery связана правильно, потому что я использую много других функций jquery, и все они работают нормально. Я также попытался удалить «px» сверху, и это, похоже, не имеет значения.

+3

JQuery сам работаю нормально, но уверены ли вы, что плагин scrollTo связан правильно? Измените одно из этих предупреждений для предупреждения ($. ScrollTo); – Andrew

ответ

93

Если это не работает, почему бы вам не попробовать использовать метод scrollTop jQuery?

$("#id").scrollTop($("#id").scrollTop() + 100); 

Если вы хотите, чтобы прокручивать плавно вы можете использовать основные яваскрипт SetTimeout/setInterval функцию, чтобы сделать его прокрутку с шагом 1px в течение заданного промежутка времени.

+3

ScrollTop работает намного более гладко в IE. –

+6

Обратите внимание, что если вы хотите прокрутить всю страницу, а не отдельный элемент, используйте $ ('html, body'), как показано здесь [Tim] (http://stackoverflow.com/users/181971). Просто $ ('body') не будет работать во всех браузерах. –

7

Похоже, что у вас немного синтаксис ... Я полагаюсь на ваш код, который вы пытаетесь прокрутить вниз на 100 пикселей в 800 мс, если это так работает (с помощью scrollTo 1.4.1):

$.scrollTo('+=100px', 800, { axis:'y' }); 
40

jQuery теперь поддерживает scrollTop как переменную анимации.

$("#id").animate({"scrollTop": $("#id").scrollTop() + 100}); 

Вам больше не нужно устанавливатьTimeout/setInterval для прокрутки плавно.

+0

Получил некоторые синтаксические ошибки - отсутствует ваше закрытие {. В противном случае это хороший момент. – Joshua

+1

Должно ли это '$ (" # id "). Offset(). Top' вместо этого? – codeulike

302
$('html, body').animate({scrollTop: $("#page").offset().top}, 2000); 
+4

+1 для этого, очень гладкий. – shmeeps

+0

Pretty awesome - спасибо! –

+18

Я часто задавался вопросом, почему люди используют «html, body» для scrollTop вместо «html». Любые мысли по этому поводу? –

6

На самом деле что-то вроде

function scrollTo(prop){ 
    $('html,body').animate({scrollTop: $("#"+prop).offset().top + 
parseInt($("#"+prop).css('padding-top'),10) },'slow'); 
} 

будет работать красиво и поддержка обивка. Вы также можете поддерживать маржу легко - для завершения см ниже

function scrollTo(prop){ 
    $('html,body').animate({scrollTop: $("#"+prop).offset().top 
+ parseInt($("#"+prop).css('padding-top'),10) 
+ parseInt($("#"+prop).css('margin-top'),10) +},'slow'); 
} 
12

Чтобы обойти html против body вопроса о, я это исправил, не анимировать CSS непосредственно, а скорее вызовом window.scrollTo(); на каждом шаге:

$({myScrollTop:window.pageYOffset}).animate({myScrollTop:300}, { 
    duration: 600, 
    easing: 'swing', 
    step: function(val) { 
    window.scrollTo(0, val); 
    } 
}); 

Это хорошо работает без каких-либо обновлений, так как использует кросс-браузерный JavaScript.

Дополнительную информацию о том, что вы можете сделать с функцией анимации jQuery, см. На странице http://james.padolsey.com/javascript/fun-with-jquerys-animate/.

+1

Это великолепно. Я только изменил 'window.pageYOffset' на' $ (window) .scrollTop() 'и' window.scrollTo (0, val) 'на' $ (window) .scrollTop (val) ', поэтому мне не нужно беспокоиться о совместимости браузера. – leftclickben

+1

Я никогда не думал передать объект в анимированный метод jQuery. Так много возможных применений. Большое спасибо, большое спасибо. – Synexis

+0

Это всерьез требует большего количества очков, это фантастика. – degenerate