2010-09-17 4 views
2

je me suis le code HTML suivant:Aller au contenu à l'intérieur d'un div scrollable

<div style="height:200px;overflow-y:scroll;"> 
    <table>.....</table> 
</div> 

Avec cette configuration, je suis un peu mimant le <select> élargi contrôle avec @size attribut défini. Ainsi, un utilisateur peut sélectionner une ligne dans la table. Y a-t-il un moyen, pour que la table "saute", afin que la ligne sélectionnée apparaisse en haut de la div et que la barre de défilement verticale défile vers sa position. Je n'ai pas besoin de l'effet de défilement réel. La table devrait changer sa position tout de suite sur la ligne cliquer.

+0

Vous voulez donc ce http://www.balupton.com/sandbox/jquery-scrollto/demo/ sans défilement du document? – balupton

+0

@balupton - à peu près oui. Très similaire. Je vais prendre le temps de tout vérifier. Merci. – Dimskiy

Répondre

2

Cela pourrait fonctionner:

$("#scrollableDiv").animate({ 
    scrollTop: 200 // scrolls to the bottom 
}, 1000); 
+0

voir http://www.learningjquery.com/2007/09/animated-scrolling-with-jquery-12 – elektronikLexikon

+0

@elektronikLexikon: Cela semble fonctionner le mieux. Comment puis-je trouver le numéro de pixel magique auquel il doit faire défiler? Les lignes de table sont de hauteur inégale. Je pense à sommer les hauteurs de rang pour chaque rangée précédant celle qui a été cliquée. Y a-t-il un moyen plus facile? – Dimskiy

+0

méthode de décalage d'essai: $ ("tr # blah_blah_blah"). Offset(). Top – elektronikLexikon

1

Je suggère d'utiliser scrollTop (ou même animer si vous voulez).

$('div')[0].scrollTop = 200 //would set the scrollable div to 200px down. 

http://jsfiddle.net/8mepH/

1

Voici un extrait modifié du code utilisé dans: http://www.balupton.com/sandbox/jquery-scrollto/demo/

Pour faire ce que vous voulez:

  // Fetch the scrollable div 
      $container = $('#scrollable'); 
      // Fetch the target div 
      $target = $('#target'); 

      // Prepare the Inline Element of the Container 
      var $inline = $('<span/>').css({ 
       'position': 'absolute', 
       'top': '0px', 
       'left': '0px' 
      }); 
      var position = $container.css('position'); 

      // Insert the Inline Element of the Container 
      $container.css('position','relative'); 
      $inline.appendTo($container); 

      // Determine the Offsets 
      var startOffset = $inline.offset().top, 
       targetOffset = $target.offset().top, 
       offsetDifference = targetOffset - startOffset; 

      // Perform the jump 
      $container.css('scrollTop',offsetDifference+'px') 

Nous ajoutons une ligne ici pour nous assurer que nous obtenir la bonne position de départ dans la zone de défilement. Nous utilisons une différence de décalage, donc si vous voulez faire des animations, c'est des animations depuis la position de départ, plutôt que de sauter ailleurs.