186 votes

Comment puis-je obtenir un élément pour faire défiler l'affichage, à l'aide de JQuery?

J'ai un document html avec des images dans un format de grille à l'aide de <ul><li><img.... La fenêtre du navigateur est à la fois verticale et horizontale de défilement.

Question: Quand je clique sur une image <img> comment puis-je obtenir le document en entier pour défiler jusqu'à une position où l'image j'ai juste cliqué sur est - top:20px; left:20px ?

J'ai eu une navigation sur ici pour des postes similaires...même si je suis assez nouveau pour JavaScript/JQuery et souhaitez comprendre comment cela est réalisé pour moi-même.

Toute aide serait Grandement Appréciée, Merci

401voto

Andy E Points 132925

Il y a une méthode DOM appelés scrollIntoView, ce qui est pris en charge par tous les navigateurs principaux, qui permettra d'aligner un élément avec le haut/gauche de la fenêtre d'affichage (ou aussi près que possible).

$("#myImage")[0].scrollIntoView();

Sinon, si tous les éléments ont des Identifiants uniques, vous pouvez simplement changer l' hash de la propriété de l' location objet de l'arrière vers l'avant/prise en charge du bouton:

$(document).delegate("img", function (e) {
    if (e.target.id)
        window.location.hash = e.target.id;
});

Après cela, il suffit de régler l' scrollTop/scrollLeft propriétés par -20:

document.body.scrollLeft -= 20;
document.body.scrollTop -= 20;

203voto

Box9 Points 41987

Puisque vous voulez savoir comment cela fonctionne, je vais vous expliquer étape par étape.

D'abord, vous voulez lier une fonction que l'image du gestionnaire de clic:

$('#someImage').click(function () {
    // Code to do scrolling happens here
});

Qui appliquera le gestionnaire de clic sur une image avec id="someImage". Si vous voulez faire cela pour toutes les images, remplacez - '#someImage' avec 'img'.

Maintenant pour le défilement de code:

  1. L'image des décalages (par rapport au document):

    var offset = $(this).offset(); // Contains .top and .left
    
  2. Soustraire 20 top et left:

    offset.left -= 20;
    offset.top -= 20;
    
  3. Maintenant animer le défilement haut et vers la gauche propriétés CSS de l' <body> et <html>:

    $('html, body').animate({
        scrollTop: offset.top,
        scrollLeft: offset.left
    });
    

8voto

Felix Kling Points 247451

Il existe des méthodes pour faire défiler l'élément directement dans la vue, mais si vous voulez faire défiler jusqu'à un point par rapport à partir d'un élément, vous devez le faire manuellement:

À l'intérieur du gestionnaire de clic, obtenir la position de l'élément par rapport au document, soustraire 20 et l'utilisation window.scrollTo:

var pos = $(this).offset();
var top = pos.top - 20;
var left = pos.left - 20;
window.scrollTo((left < 0 ? 0 : left), (top < 0 ? 0 : top));

7voto

Avoir un regard sur le jQuery.scrollTo plugin.

Voici une démo.

3voto

morgunder Points 170

Mon INTERFACE a un défilement vertical liste de pouce à l'intérieur d'un thumbbar L'objectif était de faire de l'actuel pouce droit dans le centre de la thumbbar. J'ai commencé par le approuvés réponse, mais a constaté qu'il y avait un peu de bricolage pour vraiment le centre de l'actuelle pouce. espérons que cela aide quelqu'un d'autre.

balisage:

<ul id='thumbbar'>
    <li id='thumbbar-123'></li>
    <li id='thumbbar-124'></li>
    <li id='thumbbar-125'></li>
</ul>

jquery:

// scroll the current thumb bar thumb into view
heightbar   = $('#thumbbar').height();
heightthumb = $('#thumbbar-' + pageid).height();
offsetbar   = $('#thumbbar').scrollTop();


$('#thumbbar').animate({
    scrollTop: offsetthumb.top - heightbar / 2 - offsetbar - 20
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X