La difficulté avec le défilement est que vous pouvez non seulement avoir besoin de faire défiler la page pour afficher une div, mais aussi de faire défiler les div défilables sur un nombre quelconque de niveaux.
La propriété scrollTop est disponible pour tout élément du DOM, y compris le corps du document. En la définissant, vous pouvez contrôler la profondeur de défilement d'un élément. Vous pouvez également utiliser les propriétés clientHeight et scrollHeight pour déterminer la quantité de défilement nécessaire (le défilement est possible lorsque clientHeight (fenêtre d'affichage) est inférieur à scrollHeight (la hauteur du contenu).
Vous pouvez également utiliser la propriété offsetTop pour savoir où se trouve un élément dans le conteneur.
Pour construire une routine de "défilement en vue" vraiment générale à partir de rien, il faudrait commencer par le nœud que vous voulez exposer, s'assurer qu'il est dans la partie visible de son parent, puis répéter la même chose pour le parent, etc, jusqu'à ce que vous atteigniez le sommet.
Une étape de ce processus ressemblerait à ceci (code non testé, ne vérifiant pas les cas limites) :
function scrollIntoView(node) {
var parent = node.parent;
var parentCHeight = parent.clientHeight;
var parentSHeight = parent.scrollHeight;
if (parentSHeight > parentCHeight) {
var nodeHeight = node.clientHeight;
var nodeOffset = node.offsetTop;
var scrollOffset = nodeOffset + (nodeHeight / 2) - (parentCHeight / 2);
parent.scrollTop = scrollOffset;
}
if (parent.parent) {
scrollIntoView(parent);
}
}