Comment puis-je faire défiler la page à un endroit précis en utilisant jquery?

est-il possible de faire défiler la page à un endroit précis en utilisant jQuery?

le lieu, je veux faire défiler jusqu'à avoir:

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

ou peut-il simplement se déplacer vers un domaine spécifique?

124
demandé sur Juraj Blahunka 2009-10-19 03:37:58

10 réponses

jQuery Scroll Plugin

puisqu'il s'agit d'une question marquée avec jquery je dois dire, que cette bibliothèque a un très joli plugin pour lisser le défilement, vous pouvez le trouver ici: http://plugins.jquery.com/scrollTo /

extraits de la Documentation:

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

ou

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

Fonction jQuery personnalisée pour défiler

vous pouvez utiliser un très approche légère en définissant votre fonction jQuery personnalisé

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

et l'utiliser comme:

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

Faites défiler jusqu'aux coordonnées de page

animer html et body éléments avec scrollTop ou scrollLeft attributs

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

simple javascript

scrolling avec window.scroll

window.scroll(horizontalOffset, verticalOffset);

pour résumer, utilisez la fenêtre.emplacement.de hachage pour passer à l'élément avec l'ID

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

directement en HTML (améliorations de l'accessibilité)

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

<div id="your-page-element">
    will jump here
</div>
235
répondu Juraj Blahunka 2014-04-08 18:19:35

oui, même en JavaScript, c'est assez facile. Vous donnez un id à un élément et vous pouvez l'utiliser comme "marque-page":

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

si vous voulez qu'il fasse défiler là quand un utilisateur clique sur un lien, vous pouvez juste utiliser la méthode éprouvée:

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

pour le faire programmatically, utiliser scrollIntoView()

document.getElementById("here").scrollIntoView()
122
répondu nickf 2015-12-29 22:24:05

il n'y a pas besoin d'utiliser n'importe quel plugin, vous pouvez le faire comme ceci:

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

puis utilisez ceci pour faire défiler le document au DOM spécifique:

$('html, body').animate({scrollTop: divPosition.top}, "slow");
46
répondu Meghdad Hadidi 2013-07-07 08:41:31

Voici une version javascript pure:

location.hash = '#123';

ça défile automatiquement. N'oubliez pas d'ajouter le "#" préfixe.

19
répondu o.k.w 2009-10-18 23:49:55

JavaScript Simple:

window.location = "#elementId"
6
répondu Luiz Picanço 2014-08-19 21:30:13
<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>

cet exemple montre à localiser à un ID div particulier I. e, "idVal" dans ce cas. Si vous avez ultérieure vrd/tables qui s'ouvrent dans cette page via ajax, vous pouvez assigner une divs et appeler le script pour faire défiler jusqu'à l'emplacement particulier pour chaque contenu de divs.

espérons que ce sera utile.

5
répondu user2793243 2013-09-18 21:34:06
<script type="text/javascript">
    $(document).ready(function(){
        $(".scroll-element").click(function(){
            $('html,body').animate({
                scrollTop: $('.our_companies').offset().top
            }, 1000);

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

4
répondu Yogesh Rathod 2014-12-16 13:19:55

Essayez cette

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

$(document).ready(function() {
location.hash = "divRegister";
});
1
répondu Ajay-Systematix 2016-12-06 12:10:41

voici une variante de l ' "approche légère de @juraj-blahunka . Cette fonction ne pas assumer le conteneur est le document et seulement défile si l'objet est hors de vue. L'Animation mise en file d'attente est également désactivée pour éviter les rebondissements inutiles.

$.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
répondu Richie 2015-10-05 21:33:12

utilisant jquery.soulager.min.js, Avec fixe IE Erreurs de la console

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();
            });
        });
0
répondu Super Model 2018-07-27 12:50:11