Wie kann ich mit jquery zu einem bestimmten Ort auf der Seite scrollen?

133

Ist es möglich, mit jQuery zu einem bestimmten Ort auf der Seite zu scrollen?

Muss der Ort, an dem ich scrollen möchte, Folgendes haben:

<a name="#123">here</a>

Oder kann es einfach zu einer bestimmten DOM-ID verschoben werden?

mrblah
quelle
3
nur eine kleine Anmerkung: Attribut "Name" ist in XHTML 1.1 Strict nicht erlaubt, verwenden Sie stattdessen eine ID
Juraj Blahunka
interessante Frage, können Sie keine Seitenkoordinaten zum Scrollen verwenden? Ich denke, wir sollten dazu in der Lage sein.
Omar Abid
Ich habe eine Lösung ähnlich Ihrer Anforderung unter [hier] [1] [1]: stackoverflow.com/questions/3432656/…
user1493023
@mrblah ist dein Problem gelöst?
Meghdad Hadidi

Antworten:

242

jQuery Scroll Plugin

Da dies eine mit jquery getaggte Frage ist, muss ich sagen, dass diese Bibliothek ein sehr schönes Plugin für reibungsloses Scrollen hat. Sie finden sie hier: http://plugins.jquery.com/scrollTo/

Auszüge aus der Dokumentation:

$('div.pane').scrollTo(...);//all divs w/class pane

oder

$.scrollTo(...);//the plugin will take care of this

Benutzerdefinierte jQuery-Funktion zum Scrollen

Sie können einen sehr einfachen Ansatz verwenden, indem Sie Ihre benutzerdefinierte Scroll-Abfragefunktion definieren

$.fn.scrollView = function () {
    return this.each(function () {
        $('html, body').animate({
            scrollTop: $(this).offset().top
        }, 1000);
    });
}

und benutze es wie:

$('#your-div').scrollView();

Scrollen Sie zu den Seitenkoordinaten

Animieren htmlund bodyElemente mit scrollTopoder scrollLeftAttributen

$('html, body').animate({
    scrollTop: 0,
    scrollLeft: 300
}, 1000);

Einfaches Javascript

Scrollen mit window.scroll

window.scroll(horizontalOffset, verticalOffset);

Verwenden Sie nur die Datei window.location.hash, um zum Element mit der ID zu springen

window.location.hash = '#your-page-element';

Direkt in HTML (Zugänglichkeitsverbesserungen)

<a href="#your-page-element">Jump to ID</a>

<div id="your-page-element">
    will jump here
</div>
Juraj Blahunka
quelle
Danke @Juraj Blahunka, aber ich mache das ohne Plugin
Meghdad Hadidi
Der Link führt mich nicht zu ScrollTo . Kannst du es bitte aktualisieren?
Barna Tekse
Dies sollte die Antwort sein!
Neelmeg
128

Ja, selbst in einfachem JavaScript ist es ziemlich einfach. Sie geben einem Element eine ID und können diese dann als "Lesezeichen" verwenden:

<div id="here">here</div>

Wenn Sie möchten, dass es dort blättert, wenn ein Benutzer auf einen Link klickt, können Sie einfach die bewährte Methode verwenden:

<a href="#here">scroll to over there</a>

Verwenden Sie dazu programmgesteuert scrollIntoView()

document.getElementById("here").scrollIntoView()
nickf
quelle
@nickf Dies wird noch nicht überall unterstützt. caniuse.com/#search=scrollIntoView
Aditya Singh
Dies wurde auf jeden Fall unterstützt ( developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView ). Denken Sie, Sie haben den Caniuse nicht richtig gelesen. Wird jedoch nicht animiert. Eher ein ziemlich abrupter Sprung, der nicht immer großartig ist.
Perry
53

Es ist nicht erforderlich, ein Plugin zu verwenden. Sie können dies folgendermaßen tun:

var divPosition = $('#divId').offset();

Verwenden Sie diese Option, um das Dokument zu einem bestimmten DOM zu scrollen:

$('html, body').animate({scrollTop: divPosition.top}, "slow");
Meghdad Hadidi
quelle
3
+1 Dies ist wahrscheinlich die beste Antwort. Nicht viel Code und erfordert kein Plugin.
Tricky12
1
Beachten Sie, dass Sie möglicherweise den Versatz bei der Fenstergröße neu berechnen müssen.
Bart Burg
2
@ BartBurg guter Punkt - oder einfach kurz vor dem .animateAnruf neu berechnen
mikermcneil
5
Ich liebe die einfache Antwort. Warum müssen die Leute die Dinge so kompliziert machen? Ich möchte kein weiteres Plugin.
sterfry68
1
In der Tat die beste Antwort.
Robert Ross
21

Hier ist eine reine Javascript-Version:

location.hash = '#123';

Es wird automatisch gescrollt. Denken Sie daran, das Präfix "#" hinzuzufügen.

OK W
quelle
1
Wenn Sie die primitive Methode des benannten Ankers verwenden, können Sie eine URL haben, die den Hash enthält. ZB mywebsite.com/page-about/#123 Lesezeichen enthalten auch das Verhalten von Hash + Scrollintoview.
Okw
1
Wäre toll, wenn Sie ein wenig erklären können
JGallardo
6

Einfaches Javascript:

window.location = "#elementId"
Luiz Picanço
quelle
5
<div id="idVal">
    <!--div content goes here-->
</div>
...
<script type="text/javascript">
     $(document).ready(function(){
         var divLoc = $('#idVal').offset();
         $('html, body').animate({scrollTop: divLoc.top}, "slow");
     });
</script>

Dieses Beispiel zeigt, wie Sie eine bestimmte Div-ID suchen, in diesem Fall 'idVal'. Wenn Sie nachfolgende Divs / Tabellen haben, die auf dieser Seite über Ajax geöffnet werden, können Sie eindeutige Divs zuweisen und das Skript aufrufen, um für jeden Inhalt von Divs zum jeweiligen Speicherort zu scrollen.

Hoffe das wird nützlich sein.

user2793243
quelle
4
<script type="text/javascript">
    $(document).ready(function(){
        $(".scroll-element").click(function(){
            $('html,body').animate({
                scrollTop: $('.our_companies').offset().top
            }, 1000);

            return false;
        });
    })
</script>

Yogesh Rathod
quelle
Es wäre großartig, wenn Sie Ihrem Code einige Kommentare hinzufügen würden. Wie hilft es dem Fragesteller, seine Frage zu lösen?
Artemix
1

Versuche dies

<div id="divRegister"></div>

$(document).ready(function() {
location.hash = "divRegister";
});
Ajay-Systematix
quelle
0

Hier ist eine Variante des leichten Ansatzes von @ juraj-blahunka . Diese Funktion setzt nicht voraus, dass der Container das Dokument ist, und scrollt nur, wenn das Element nicht sichtbar ist. Die Warteschlange für Animationen ist ebenfalls deaktiviert, um unnötiges Abprallen zu vermeiden.

$.fn.scrollToView = function () {
    return $.each(this, function () {
        if ($(this).position().top < 0 ||
            $(this).position().top + $(this).height() > $(this).parent().height()) {
            $(this).parent().animate({
                scrollTop: $(this).parent().scrollTop() + $(this).position().top
            }, {
                duration: 300,
                queue: false
            });
        }
    });
};
Richie
quelle
Ich hatte das Bounce-Problem, aber Ihre Methode funktioniert nicht
Anon
0

Verwenden von jquery.easing.min.js mit festen Fehlern in der IE-Konsole

Html

<a class="page-scroll" href="#features">Features</a>
<section id="features" class="features-section">Features Section</section>


        <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
        <script src="js/jquery.js"></script>
        <!-- Include all compiled plugins (below), or include individual files as needed -->
        <script src="js/bootstrap.min.js"></script>

        <!-- Scrolling Nav JavaScript -->
        <script src="js/jquery.easing.min.js"></script>

Jquery

//jQuery to collapse the navbar on scroll, you can use this code with in external file with name scrolling-nav.js
        $(window).scroll(function () {
            if ($(".navbar").offset().top > 50) {
                $(".navbar-fixed-top").addClass("top-nav-collapse");
            } else {
                $(".navbar-fixed-top").removeClass("top-nav-collapse");
            }
        });
        //jQuery for page scrolling feature - requires jQuery Easing plugin
        $(function () {
            $('a.page-scroll').bind('click', function (event) {
                var anchor = $(this);
                if ($(anchor).length > 0) {
                    var href = $(anchor).attr('href');
                    if ($(href.substring(href.indexOf('#'))).length > 0) {
                        $('html, body').stop().animate({
                            scrollTop: $(href.substring(href.indexOf('#'))).offset().top
                        }, 1500, 'easeInOutExpo');
                    }
                    else {
                        window.location = href;
                    }
                }
                event.preventDefault();
            });
        });
Supermodel
quelle
Das ist viel zu viel Code für eine so einfache Aufgabe. location.hash = 'idOfElement';sollte ausreichen
Kolob Canyon