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?


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>

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 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");

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.


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


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.


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

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


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";
});

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
            });
        }
    });
};

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();
            });
        });

Das ist viel zu viel Code für eine so einfache Aufgabe. location.hash = 'idOfElement';sollte ausreichen
Kolob Canyon

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.