IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

faire défiler le contenu d'un tableau


Sujet :

JavaScript

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Points : 386
    Points
    386
    Par défaut faire défiler le contenu d'un tableau
    Bonjour suite à la discussion précédente:

    http://www.developpez.net/forums/d83...onnes-tableau/

    En complément ce n'est pas ça que je cherche à faire:
    tableau avec entête de colonne et entête de ligne avec 2 scroll.
    le scroll vertical fait défiler les lignes et entête de ligne en gardant l'entête de colonne fixe.
    le scroll horizontal fait défiler les colonne et entête de colonne en gardant l'entête de ligne fixe.

    Merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 313
    Points : 330
    Points
    330
    Par défaut
    Il y a pourtant pléthore de méthodes dans le thread dont tu parles.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Points : 386
    Points
    386
    Par défaut
    Que je sache, un axe no pb mais 2 axes avec titre des lignes et colonnes, jamais vu.

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Salut.
    Tu pourrais tester avec un scroll horizontal sur le <table> et un scroll vertical sur le <tbody>
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 313
    Points : 330
    Points
    330
    Par défaut
    Comment ferais-tu pour masquer ou afficher des lignes sur un tableau ?

    L'objet que je propose gère les colonnes. Quoi faire pour qu'il gère aussi les lignes ?

  6. #6
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Non, l'idée n'est pas de masquer ou d'afficher des lignes ou colonnes, ce serait plutôt de fixer la taille de la table puis de mettre un overflow-x en scroll sur la balise <table> (donc scroll horizontal) et un overflow-y en scroll sur la balise <tbody> (scroll vertical sans impact sur le thead).
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Points : 386
    Points
    386
    Par défaut
    Tu pourrais tester avec un scroll horizontal sur le <table> et un scroll vertical sur le <tbody>
    Le pb est que je vais perdre les entêtes comte tenu de la dimension du tableau.

    Pour info, le tableau est un planning calendaire journalier inter-actif, actualisé via AJAX, comportant plus de 200 lignes sur 50 colonnes environ, donc qui dépasse la taille de l'écran.

  8. #8
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    malheureusement le scroll n'ai pas géré sous ie ( propriété overflow ) j'avais eu un problème similaire
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 313
    Points : 330
    Points
    330
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Non, l'idée n'est pas de masquer ou d'afficher des lignes ou colonnes, ce serait plutôt de fixer la taille de la table puis de mettre un overflow-x en scroll sur la balise <table> (donc scroll horizontal) et un overflow-y en scroll sur la balise <tbody> (scroll vertical sans impact sur le thead).
    Arf... Mes questions étaient destinées à Mengué georges (suite à son post avant le tiens).

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Points : 386
    Points
    386
    Par défaut
    j'avais vu ta réponse "kernelfailure" et je l'ai testée mais n'y aurai-t-il pas une solution sans passer par js qui serait plus fluide ? avant de faire un test d'application.

  11. #11
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    div dans une cellule ....
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Points : 386
    Points
    386
    Par défaut
    Test de la solution de "kernelfailure" gros pb:
    afin de diminuer la taille du tableau, utilisation maximum de colspan dans mon planning et là pb de décalage.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 313
    Points : 330
    Points
    330
    Par défaut
    Citation Envoyé par Mengué georges Voir le message
    Test de la solution de "kernelfailure" gros pb:
    afin de diminuer la taille du tableau, utilisation maximum de colspan dans mon planning et là pb de décalage.
    Ca ne me surprends pas. Ca ne fonctionne sous cette forme que pour des tableaux "réguliers".
    Pour gérer des colspan et des rowspan, ça va être une autre histoire.

  14. #14
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    et l'utilisation des div ??? non ???
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 313
    Points : 330
    Points
    330
    Par défaut
    Il n'y a que les divs pour le cas des col et row...

    Je suis parvenu à un test à peu près fonctionnelle.
    Ca réagit pas mal sous FF, c'est capricieux sous Safari. Le soucis vient de la gestion des évènements.
    Si quelqu'un a une bonne idée, c'est le moment

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
     
    <html>
    <head></head>
    <body>
    <br><br><br>
    <table><tr><td>sdfgsfdgsdfg</td><td>
    <div id="TOTOP"></div>
    <div id="TOLEFT"></div>
    <div id="TOBODY">
    <table id="TOCLONE" border=1>
    <tr><th></th><th>h1</th><th>h2</th><th>h3</th><th>h4</th><th>h5</th><th>h6</th><th>h7</th><th>h8</th></tr>
    <tr><th>T1</th><td rowspan=2>11 ET 21</td><td>12</td><td>13</td><td>14</td><td>15</td><td>16</td><td>17</td><td>18</td></tr>
    <tr><th>T2 ERTE</th><td>22</td><td>23</td><td>24</td><td>25</td><td>26</td><td>27</td><td>28</td></tr>
    <tr><th>T3</th><td>31</td><td>32</td><td colspan="2">33 ET 34</td><td>35</td><td>36</td><td>37</td><td>38</td></tr>
    <tr><th>T4</th><td>41</td><td>42</td><td>43</td><td>44</td><td>45</td><td>46</td><td>47</td><td>48</td></tr>
    <tr><th>T5</th><td>51</td><td>52</td><td>53 fgh</td><td>54</td><td>55</td><td>56</td><td>57</td><td>58</td></tr>
    <tr><th>T6</th><td>61</td><td>62</td><td>63</td><td>64</td><td>65</td><td>66</td><td>67</td><td>68</td></tr>
    </table>
    </div>
    </td></tr></table>
    <script>
    var sizex = 150;
    var sizey = 150;
    var topHeadColor = 'grey';
    var leftHeadColor = 'grey';
    var squareColor = 'white';
     
    var toclone = document.getElementById('TOCLONE');
     
    var top = document.getElementById('TOTOP');
    top.appendChild(toclone.cloneNode(true));
    var left = document.getElementById('TOLEFT');
    left.appendChild(toclone.cloneNode(true));
     
    toclone.parentNode.style.overflow = 'scroll';
    toclone.parentNode.style.width = sizex+'px';
    toclone.parentNode.style.height = sizey+'px';
     
    var tobody = document.getElementById('TOBODY');
    var w=tobody.clientWidth;
    var h=tobody.clientHeight;
     
    function moveHeader (event) {
    		var tb = document.getElementById('TOBODY');
    		var sx = tb.scrollLeft;
    		var sy = tb.scrollTop;
    		document.getElementById('TOTOP').firstChild.style.left = '-' + sx + 'px';
    		document.getElementById('TOLEFT').firstChild.style.top = '-' + sy + 'px';
     
    		e.cancelBubble = true;
    		if (e.stopPropagation) { e.stopPropagation(); }
    	}; 
     
    tobody.onmousemove = function(event) { moveHeader(event) };
    tobody.onmousedown = function(event) { moveHeader(event) };
    tobody.onmouseup = function(event) { moveHeader(event) };
     
    var tr = toclone.getElementsByTagName('tr');
    var l=0;
    var c=0;
    l = Math.max(l, tr[0].offsetHeight);
    for(var i=0, n=tr.length; i<n; i++) {
    	c = Math.max(c, tr[i].firstChild.offsetWidth);
    }
     
    top.style.display = 'inline';
    top.style.position = 'absolute';
    top.style.clip = 'rect(0px,'+w+'px,'+l+'px,0px)';
     
    top.firstChild.style.background = topHeadColor;
    top.firstChild.style.top = '0px';
    top.firstChild.style.left = '0px';
    top.firstChild.style.bottom = '0px';
    top.firstChild.style.right = '0px';
    top.firstChild.style.position = 'absolute';
     
    left.style.display = 'inline';
    left.style.position = 'absolute';
    left.style.clip = 'rect('+l+'px,'+c+'px,'+h+'px,0px)';
     
    left.firstChild.style.background = leftHeadColor;
    left.firstChild.style.top = '0px';
    left.firstChild.style.left = '0px';
    left.firstChild.style.bottom = '0px';
    left.firstChild.style.right = '0px';
    left.firstChild.style.position = 'absolute';
     
    var clip = document.createElement('div');
    clip.style.position = 'absolute';
    clip.style.background = squareColor;
    clip.style.top = '0px';
    clip.style.left = '0px';
    clip.style.width = c+'px';
    clip.style.height = l+'px';
    clip.style.zIndex = '100';
    top.appendChild(clip);
     
    </script>
    </body>
    </html>
    Le principe est le suivant :
    On clone le tableau dans deux divs. On cache ce qui déborde pour ne garder que les entête top et left (clip).
    Une troisième div (container du tableau) va servir pour le scroll, en écoute de certains events pour synchroniser (avec plus ou moins de bonheur) le défilement des entêtes.

    Enfin, un dernier DIV est ajouter pour cacher les débordement du scrolling en haut à gauche, vu que je n'ai pas réussi à ajouter une zone de clipping pour les données.

    Désolé, je n'ai pas passé le ballait dans ce bout de code, je voulais essayé ce que j'avais en tête. Le plus propre reste à faire

    Je ne sais pas si IE peut digérer ça. Mais voilà l'idée.

    Aussi : La récupération des tailles des éléments mériterait d'être plus précise. Et dernière chose, le scroll du navigateur n'est pas pris en compte (je n'ai aucune idée sur l'impact. J'ai pas testé).

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Points : 386
    Points
    386
    Par défaut
    Bonjour

    Après test, c'est pas mal mais j'ai un gros pb, nous sommes à 99% sur IE6 et là pb sur les scroll.
    Donc pour l'instant je reste sur le scroll vertical via 2 div contenant entête et données avec scroll, mais je ne désespère pas.

Discussions similaires

  1. comment faire défiler un contenue d'une page
    Par Nad84jia dans le forum Développement Web en Java
    Réponses: 4
    Dernier message: 29/12/2011, 14h19
  2. faire défiler des images dans un tableau
    Par cyril_bft dans le forum Général JavaScript
    Réponses: 21
    Dernier message: 15/12/2010, 12h55
  3. faire défiler des colonnes d'un tableau
    Par lelectronique.com dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 16/11/2009, 13h59
  4. Faire défiler un contenu dans une page fixe.
    Par limzinoz dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 30/06/2007, 11h11
  5. Faire défiler les elements d'un tableau
    Par Laure888 dans le forum Flash
    Réponses: 2
    Dernier message: 12/10/2005, 16h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo