2009-07-23 14 views
14

Więc desperacko próbuję uzyskać przewijanie funkcjonalności do pracy na stronie. Po braku szczęścia postanawiam po prostu umieścić na mojej stronie window.scrollTo(0, 800);, aby sprawdzić, czy mogę przeprowadzić przewijanie. Nic się nie dzieje. Mam akordeon, który rozszerza się, a następnie chcę przewinąć do określonego elementu. Ale na razie byłbym szczęśliwy, widząc, że przedmiot w ogóle się przewija. Ktoś na to wpada?Metoda JavaScript scrollTo nic nie robi?

Dzięki!

+0

Należy zauważyć, że wypróbowałem wtyczkę scrollTo JQuery bez żadnego szczęścia. $ .scrollTo (0,800); – Nick

+3

W firefox w moim pasku adresu właśnie wstawiłem javascript: window.scrollTo (0, 800); i wydawało się, że działa. – Davis

+0

ok, a. wypróbuj go w różnych przeglądarkach, sprawdź, czy działa w dowolnej. b. wypróbuj coś takiego jak document.body.scrollTo. do. pamiętaj, że javascript uwzględnia wielkość liter. Nie jestem pewien, czy któryś z nich pomoże, ale możesz spróbować. –

Odpowiedz

14

Udało mi się rozwiązać ten problem za pomocą metody anQuery jQuery(). Oto przykład implementacji, którą wybrałem:

$('#content').animate({ scrollTop: elementOffset }, 200); 

Selektor pobiera element div z identyfikatorem = "treść". Następnie stosuję metodę animacji na nim z scrollTop jako opcją. Drugi parametr to czas w milisekundach trwania animacji. Mam nadzieję, że to pomoże komuś innemu.

+1

Próbowałem innych odpowiedzi. To jest jedyny, który pracował dla mnie. Różnica polega na tym, że użyłem '$ ('body'). Animate ({scrollTop: top}, 0);' gdzie 'top' jest zmienną zawierającą współrzędną y w liczbie całkowitej. –

-2

Oczywiście nie przewinie się, jeśli twoja strona nie jest co najmniej (wysokość ekranu - 800) wysoka. Czy widzisz pasek przewijania? W przeciwnym razie robisz coś złego.

0

Po pierwsze, czy strona jest na tyle duża, aby przewijać (nawet jeśli jest w ramce iframe)? Jeśli nie, lub nie jesteś pewien, zrób gigantyczny div, a następnie umieść coś pod nim. Spróbuj przewinąć do tego.

Następnie, jeśli przewijanie w elemencie iframe, umieść kod na tej samej stronie co źródło ramki. W ten sposób nie musisz się martwić o uzyskanie dokumentu lub określonego elementu w drugim oknie, co może być trudne. O tak, jesteś pewien, że dostajesz tę część, prawda? Przejście z Firebug może ci w tym pomóc.

Na koniec umieść punkt przerwania (używając Firebug) na linii, która ma spowodować przewijanie. Czy trafia w ten punkt przerwania? Jeśli nie, twój kod nie jest wykonywany, a przewijanie nie jest twoim problemem.

(I odpowiedział ten, wraz z potwierdzającymi kontekst z your earlier question.)

EDIT:

przewijanie odbywa się okno przez okno. Jeśli jesteś w ramce, która nie może przewijać, nic nie przewinie. Jeśli chcesz, aby ten element w ramce był przewijany, pobierz przesunięcie tego elementu do bieżącego okna i dodaj je do przesunięcia ramki zawierającej. To powinno wystarczyć.

+0

Tak, strona ma wystarczającą wysokość. Widzę pasek przewijania. Podejrzewam, że problem dotyczy składu tej strony. Ponieważ ta strona została utworzona przed dniami masterpages, mam stronę główną zawierającą 2 ramki. Pierwszy to pasek nawigacji nagłówka, a drugi to obszar zawartości. Zakładam, że to jest powód, dla którego metoda scrollTo nie działa. – Nick

+0

tak, przewijanie odbywa się przez okno. jeśli jesteś w ramce, która nie może przewijać, nic nie przewinie. i oszalejesz, próbując dowiedzieć się, co jest nie tak. oh ... – geowa4

3

miałem ten sam problem dzisiaj i wtedy odkryłem, że gdy wyjąłem auto generowane blok doctype:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 

window.scrollTo (0,800) rozpoczął pracę wraz z ExtJS scrollTo() funkcji Początkowo próbowałem użyć. Zablokowałem blok i przestało działać. Nie wiem, czy to było to, na co się natknąłeś (2 lata temu), ale mam nadzieję, że pomoże to komuś wpadać na ten sam problem.

21

Jeśli masz coś takiego:

html, body { height: 100%; overflow:auto; } 

Jeśli zarówno ciała i html mieć definicję wysokości 100%, a także przewijanie włączone, window.scrollTo (i wszystkie pochodne mechanizmy przewijania) nie działają, mimo wyświetlany pasek przewijania (który może być używany przez użytkownika), gdy zawartość przekracza 100% wysokości ciała. Jest tak, ponieważ pasek przewijania, który widzisz, nie jest tym z okna, ale z ciała.

Rozwiązanie:

html { height: 100%; overflow:auto; } 
body { height: 100%; } 
5

naprawiłem ten problem z użyciem setTimout. Używałem angularjs ale może to może pomóc również w wanilii.

 setTimeout(function() { 
      window.scrollTo(0, 300); 
     },2); 
+0

To musi być najlepsza odpowiedź. Dzięki. – JulianSoto

1

Sprawdź, czy twój tag gdzie jest podłączony twój przewijak, uzyskał przepełnienie CSS [/ - x-y]: hidden. Naprawiono błąd

0

Czasami jest to nie tylko problem z css, dla mnie ta przeglądarka była winowajcą. Musiałem rozwiązać to za pomocą tego kodu.

if ('scrollRestoration' in window.history) { 
    window.history.scrollRestoration = 'manual' 
} 

Pozwala deweloperowi przejąć na własność zmiany przewijania. Przeczytaj więcej na ten temat: here

Powiązane problemy