Jak przewijać do elementu w jQuery?

Zrobiłem następujący kod w JavaScript, aby skupić się na konkretnym elemencie (branch1 jest elementem),

document.location.href="#branch1";

Ale ponieważ używam również jQuery w mojej aplikacji internetowej, więc chcę wykonać powyższy kod w jQuery. Próbowałem, ale nie wiem, dlaczego nie działa,

$("#branch1").focus();

Powyższy kod jquery (focus()) nie działa dla div, natomiast jeśli próbuję tego samego kodu z textboxem, to działa

Proszę mi powiedzieć, jak Mogę umieścić focus na div elemnt za pomocą jQuery?

Dzięki!
Author: jordanstephens, 2009-02-01

8 answers

Sprawdź jQuery.ScrollTo , myślę, że to jest zachowanie, które chcesz, sprawdź demo .

 32
Author: CMS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-24 16:47:58

Dla mojego problemu ten kod zadziałał, musiałem przejść do znacznika anchor przy ładowaniu strony:

$(window).scrollTop($('a#captchaAnchor').position().top);

W tym przypadku możesz użyć tego na dowolnym elemencie, nie tylko znaczniku kotwicy.

 108
Author: Banning,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-31 08:11:46

Podobnie jak @user293153 dopiero co odkryłem to pytanie i wydawało się, że nie otrzymałem poprawnej odpowiedzi.

Jego odpowiedź była najlepsza. Ale możesz również animować do elementu.
$('html, body').animate({ scrollTop: $("#some_element").offset().top }, 500);
 46
Author: User123342234,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-04 00:52:11

Możesz rozszerzyć funkcjonalności jQuery w następujący sposób:

jQuery.fn.extend({
scrollToMe: function () {
    var x = jQuery(this).offset().top - 100;
    jQuery('html,body').animate({scrollTop: x}, 500);
}});

A następnie:

$('...').scrollToMe();

Easy; -)

 37
Author: MCurbelo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-14 15:42:21

Sprawdź jquery-scrollintoview .

ScrollTo jest w porządku, ale często chcesz tylko upewnić się, że element interfejsu jest widoczny, niekoniecznie na górze. ScrollTo Ci w tym nie pomoże. Od scrollintoview ' s README:

Jak Ta wtyczka rozwiązuje problem doświadczenia użytkownika

Ta wtyczka przewija dany element w widok podobny do przeglądarki wbudowaną funkcjonalność (funkcja SCROLLINTOVIEW () DOM), ale działa inaczej (i prawdopodobnie bardziej przyjazny dla użytkownika):

  • przewija do elementu tylko wtedy, gdy element jest faktycznie poza widokiem; jeśli element jest w widoku (w dowolnym miejscu widocznego obszaru dokumentu), nie ma przewijania zostanie wykonana;
  • przewija za pomocą efektów animacji; podczas przewijania Użytkownicy wiedzą dokładnie, że nie są nigdzie przekierowywani, ale faktycznie widzą że są po prostu przenoszone gdzieś indziej na tej samej stronie (jak również jak w którym kierunku się poruszali);
  • zawsze jest najmniejszą ilość przewijania. gdy element znajdzie się nad widocznym obszarem dokumentu, zostanie on przewinięty do górnej części widocznego obszaru; gdy element znajduje się poniżej widocznego, będzie przewijane do dołu widocznego obszaru; jest to najbardziej spójna sposób przewijania-podczas przewijania zawsze będzie do góry to czasami nie można przewijać elementu do góry, gdy znajdował się blisko dołu przewijalny kontener (w ten sposób przewijanie byłoby nieprzewidywalne);
  • kiedy Rozmiar elementu przekracza rozmiar widocznego obszaru dokumentu.]}
 4
Author: Jonathan Tran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-21 17:07:53

Użyj

$(window).scrollTop ()

Spowoduje przewinięcie okna do elementu.

 var scrollPos =  $("#branch1").offset().top;
 $(window).scrollTop(scrollPos);
 2
Author: Nishad Up,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-26 08:02:27

Myślę, że możesz szukać "kotwicy", biorąc pod uwagę przykład, który masz.

<a href="#jump">This link will jump to the anchor named jump</a>
<a name="jump">This is where the link will jump to</a>

Metoda focus jQuery robi coś innego niż to, co próbujesz osiągnąć.

 1
Author: Luca Matteis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-01 06:31:26

Aby funkcja focus() działała na elemencie div musi mieć atrybut tabindex. Prawdopodobnie nie jest to wykonywane domyślnie na tego typu elementach, ponieważ nie jest to pole wejściowe. Możesz dodać tabindex na przykład przy -1, aby uniemożliwić użytkownikom, którzy używają tab, aby skupić się na nim. Jeśli użyjesz pozytywnego tabindex użytkownicy będą mogli użyć tab, aby skupić się na elemencie div.

Oto przykład: http://jsfiddle.net/klodder/gFPQL/

Jednak tabindex nie jest obsługiwany w Safari.

 0
Author: Klodder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-15 12:31:38