Come posso scorrere fino a una posizione specifica sulla pagina usando jquery?


133

È possibile scorrere fino a una posizione specifica sulla pagina utilizzando jQuery?

La posizione che voglio scorrere deve avere:

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

O può semplicemente passare a un ID DOM specifico?


3
solo una piccola nota: l'attributo "nome" non è consentito in XHTML 1.1 Strict, usa invece un ID
Juraj Blahunka,

domanda interessante, non puoi usare le coordinate della pagina per scorrere? Penso che dovremmo essere in grado di farlo.
Omar Abid

Ho avuto soluzione simile a vostro requisito [qui] [1] [1]: stackoverflow.com/questions/3432656/...
user1493023

@mrblah il tuo problema è stato risolto?
Meghdad Hadidi,

Risposte:


242

Plugin di scorrimento jQuery

dal momento che questa è una domanda taggata con jquery, devo dire che questa libreria ha un plugin molto bello per uno scorrimento fluido, puoi trovarlo qui: http://plugins.jquery.com/scrollTo/

Estratti dalla documentazione:

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

o

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

Funzione jQuery personalizzata per lo scorrimento

puoi usare un approccio molto leggero definendo la tua funzione di scorrimento personalizzata jquery

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

e usalo come:

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

Scorri fino alle coordinate di una pagina

Animare htmled bodyelementi con scrollTopo scrollLeftattributi

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

JavaScript semplice

scorrendo con window.scroll

window.scroll(horizontalOffset, verticalOffset);

solo per riassumere, usa window.location.hash per saltare all'elemento con ID

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

Direttamente in HTML (miglioramenti dell'accessibilità)

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

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

Grazie @Juraj Blahunka, ma lo faccio senza alcun plug-in
Meghdad Hadidi

Il link non mi sta portando a ScrollTo . Puoi aggiornarlo per favore?
Barna Tekse,

Questa dovrebbe essere la risposta!
Neelmeg,

128

Sì, anche in JavaScript semplice è abbastanza facile. Dai a un elemento un ID e poi puoi usarlo come "segnalibro":

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

Se vuoi che scorra lì quando un utente fa clic su un link, puoi semplicemente usare il metodo provato e vero:

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

Per farlo a livello di codice, utilizzare scrollIntoView()

document.getElementById("here").scrollIntoView()

@nickf Questo non è ancora supportato ovunque. caniuse.com/#search=scrollIntoView
Aditya Singh,

Questo lo ho supportato ( developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView ). Pensi di non aver letto correttamente il caneuse. Tuttavia, non sarà animato. Piuttosto un salto piuttosto brusco che non è sempre eccezionale.
perry,

53

Non è necessario utilizzare alcun plug-in, puoi farlo in questo modo:

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

quindi utilizzalo per scorrere il documento fino a un DOM specifico:

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

3
+1 Questa è probabilmente la risposta migliore. Non c'è molto codice e non richiede un plugin.
Tricky12,

1
Si noti che potrebbe essere necessario ricalcolare l'offset al ridimensionamento della finestra.
Bart Burg,

2
@BartBurg buon punto-- o semplicemente ricalcolare proprio prima .animateche avvenga la chiamata
mikermcneil

5
Adoro la risposta semplice. Perché le persone devono rendere le cose così complicate? Non voglio un altro plugin.
sterfry68,

1
In effetti la migliore risposta.
Robert Ross

21

Ecco una versione javascript pura:

location.hash = '#123';

Scorrerà automaticamente. Ricorda di aggiungere il prefisso "#".


1
Usando il modo primitivo di ancoraggio con nome, puoi avere un URL che include l'hash Ad esempio mywebsite.com/page-about/#123 Il bookmarking include anche il comportamento hash + scrollintoview.
Ok,

1
Sarebbe fantastico se puoi spiegarlo un po '
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>

Questo esempio mostra come individuare un particolare div id, ad esempio "idVal" in questo caso. Se hai div / tabelle successive che si apriranno in questa pagina tramite ajax, puoi assegnare div unici e chiamare lo script per scorrere fino alla posizione particolare per ogni contenuto di div.

Spero che questo sia utile.


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

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


Sarebbe bello se aggiungi alcuni commenti al tuo codice. In che modo aiuta chi chiede a risolvere la sua domanda?
Artemix,

1

Prova questo

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

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

0

Ecco una variante dell'approccio leggero di @juraj-blahunka . Questa funzione non presuppone che il contenitore sia il documento e scorre solo se l'elemento non è visibile. Anche l'accodamento delle animazioni è disabilitato per evitare inutili rimbalzi.

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

Ho avuto il problema del rimbalzo, ma il tuo metodo non funziona
Anon il

0

Utilizzando jquery.easing.min.js, con errori di console IE corretti

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

Questo è troppo codice per un compito così semplice. location.hash = 'idOfElement';dovrebbe bastare
Kolob Canyon

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.