2009-10-18 2 views
121

Kann mit jQuery zu einer bestimmten Stelle auf der Seite geblättert werden?Wie kann ich mit jQuery zu einem bestimmten Ort auf der Seite blättern?

Ist die Lage I blättern wollen zu müssen haben:

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

Oder kann es bewegen Sie einfach auf eine bestimmte DOM-ID?

+3

nur eine kleine Anmerkung: Attribut "name" ist in XHTML 1.1 Strict nicht erlaubt, eine ID statt –

+0

interessante Frage verwenden, können nicht Seite blättern Koordinaten? Ich denke, wir sollten es können. –

+0

Ich habe Lösung ähnlich Ihre Anforderung an [hier] [1] [1]: http://stackoverflow.com/questions/3432656/scroll-to-a-div-using-jquery – user1493023

Antwort

118

Ja, sogar in einfachem JavaScript ist es ziemlich einfach. Sie geben ein Element eine ID und dann können Sie das als „Lesezeichen“ verwenden:

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

Wenn Sie es wünschen, dort zu bewegen, wenn ein Benutzer auf einen Link klickt, können Sie einfach die erprobte und wahre Methode verwenden, :

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

es programmatisch zu tun, ist scrollIntoView()

verwenden
document.getElementById("here").scrollIntoView() 
+0

Danke @nickf, gute Lösung, aber ich würde glatt scrollen brauchen –

+0

@nickf Dies wird noch nicht überall unterstützt. http://caniuse.com/#search=scrollIntoView –

+0

Dies wird unterstützt (https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView). Denke, du hast die Caniuse nicht richtig gelesen. Wird jedoch nicht animiert. Eher ein ziemlich abrupter Sprung, der nicht immer großartig ist. – perry

19

Hier ist eine reine JavaScript-Version:

location.hash = '#123'; 

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

+1

Mit dem einfachen Weg des benannten Ankers können Sie eine URL haben, die den Hash enthält. http://www.mywebsite.com/page-about/#123 Bookmarking enthält auch das Hash + scrollinviewview-Verhalten. –

+0

Danke @ o-k-w, es hat funktioniert! aber ich brauche glatte scroll –

+0

Wäre toll, wenn Sie ein wenig erklären können – JGallardo

232

jQuery Scroll Plugin

da dies eine Frage mit jquery ich sagen markiert ist müssen, dass diese Bibliothek ein sehr schönes Plugin für smooth scrolling hat, können Sie es hier finden: http://plugins.jquery.com/scrollTo/

Auszüge aus Dokumentation:

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

oder

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

Benutzerdefinierte jQuery-Funktion für

Scrollen können Sie eine sehr leichten Ansatz verwenden durch Ihre benutzerdefinierte Scroll jquery Funktion

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

definieren und verwenden Sie es mögen:

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

Scroll zu einer Seite Koordinaten

Animieren html und body Elemente mit scrollTop oder scrollLeft

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

Plain Attribute JavaScript

mit window.scroll

Scrolling
window.scroll(horizontalOffset, verticalOffset); 

nur zusammenzufassen, verwenden Sie die window.location.hash mit ID

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

direkt in HTML (accesibility Erweiterungen)

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

<div id="your-page-element"> 
    will jump here 
</div> 
+9

+1 Der leichte Ansatz ist so cool, bravo! – jartaud

+0

Ausgezeichnete Antwort! –

+0

Danke @Juraj Blahunka, aber ich mache das ohne Plugin –

46

Es zu Element springen müssen keine Plugins verwenden , können Sie es wie folgt tun:

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

dann dieses verwenden Dokument auf bestimmten DOM blättern:

$('html, body').animate({scrollTop: divPosition.top}, "slow"); 
+2

+1 Dies ist wahrscheinlich die beste Antwort. Nicht viel Code und erfordert kein Plugin. – Tricky12

+1

Beachten Sie, dass Sie den Offset bei der Fenstergrößenanpassung möglicherweise neu berechnen müssen. –

+2

@BartBurg guter Punkt-- oder einfach neu berechnen, bevor der '.animate' Anruf passiert – mikermcneil

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 auf eine bestimmte div id heißt, 'idVal' in diesem Fall zu lokalisieren. Wenn Sie nachfolgende divs/tables haben, die auf dieser Seite über Ajax geöffnet werden, können Sie eindeutige divs zuweisen und das Skript aufrufen, um zu dem bestimmten Ort für jeden Inhalt von divs zu blättern.

Hoffe, das wird nützlich sein.

6

Plain Javascript:

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

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

+0

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

0

ist hier Variante @ juraj-blahunka des leichten Ansatz. Diese Funktion geht nicht davon aus, dass der Container das Dokument ist, und scrollt nur, wenn das Objekt nicht sichtbar ist. Die Animation-Warteschlange ist ebenfalls deaktiviert, um unnötiges Springen 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 
      }); 
     } 
    }); 
}; 
+0

Ich hatte das Bounce-Problem, aber Ihre Methode funktioniert nicht –

1

Versuchen Sie, diese

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

$(document).ready(function() { 
location.hash = "divRegister"; 
});