2012-04-13 3 views
25

Как я могу использовать scrolltop без анимацииJQuery - ScrollTop без анимации

Этот код работает:

var offTop = $('#box').offset().top; 
offTop = offTop-43; 
$('#mainCt').animate({scrollTop: '+=' + offTop + 'px'}, 400); 

А вот мои (не рабочие растворы):

$("#mainCt").scrollTop('+=' + offTop + 'px');     // doesn't work 
$("#mainCt").scrollTop('+='+offTop);       // doesn't work 
hhh = setTimeout(' $("#mainCt").scrollTop('+offTop+');',800); // doesn't work 

DEMO
http://jsfiddle.net/DNNFF/9/

ответ

11

может быть, если вы не хотите анимацию или что-нибудь фантазии просто использовать якорь

<a name="top"></a> 

там, где вам нужно прокрутить

и в функции, где вы звоните использовать

document.location.href="#top"; 

Вы также можете создать функцию добавления якоря перед элементом d o document.location вещь, а затем удалить этот якорь.

http://jsfiddle.net/fSrxr/1/

+6

Это работает, но как я могу использовать jQuery ScrollTop без анимации? – user970727

+1

Хотя этот ответ «работает», он вступает в историю браузера. $ (element) .scrollTop (offset) лучше для репозиции без анимации и без использования истории браузера. Особенно $ (window) .scrollTop (смещение) для повторного позиционирования раздела JQuery UI Accordion после загрузки аккордеона. – Reuben

17

Попробуйте это:

var offTop = $('#box').offset().top - 43; 
$('#mainCt').scrollTop(offTop); 

scrollTop Свойство принимает только целое число, никаких суффиксов или блоков требуется.

+1

не работает:/ – user970727

+0

Работает хорошо здесь: http://jsfiddle.net/wNehJ/ Есть ли у вас какие-либо ошибки в консоли? –

+0

Нет ошибок, действительно странно. http://jsfiddle.net/DNNFF/6/ – user970727

9

http://api.jquery.com/scrollTop/

$(window).scrollTop(offTop) 
+0

mainCt правильный;) – user970727

+0

если mainCt - это слой с полосой прокрутки (переполнение: авто), то вы можете использовать его на mainCt. Если вы хотите прокрутить окно просмотра обозревателя, вам нужно использовать окно. – sod

+0

right, mainCt - это div с переполнением-x: скрытый; переполнение-y: прокрутка; – user970727

0

не могли бы вы играть с длительностью?

var offTop = $('#box').offset().top; 
offTop = offTop-43; 
$('#mainCt').delay('800').animate({scrollTop: '+=' + offTop + 'px'}, 1); 
+0

Я могу, но это решение немного грязно:/ – user970727

+0

Не отвечает на вопрос. – igorpavlov

3

Почему бы не использовать его с меньшей длительности. Я искал его, и у него не было анимации. SInce не будет времени, чтобы увидеть анимацию, анимации вообще не будет.

var offTop = $('#box').offset().top; 
offTop = offTop-43; 
$('#mainCt').animate({scrollTop: '+=' + offTop + 'px'}, 50); //50 added here as duartion 
+0

Не отвечает на вопрос. – igorpavlov

8

Пропустить jQuery. Просто используйте JavaScript:

window.scroll(0, 0);