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.