par
heddicmi » 22 nov. 2006, 15:49
Comme sur developpez.com, ce sujet semble avoir du mal à attirer les foules
Je tiens à vous laisser mes dernières avancés sur ce sujet en consultant ce message :
Changement de politique. Je suis repartis de 0...
Bien m'en a pris. trotters213, j'avais déjà consulté ce tableau qui ne m'avait pas convaincu.
Cependant, il m'a permis de retrouver une propriété scrolltop. Celle-ci permet de savoir de combien on a descendu la barre de défillement.
De ce fait, je me suis basé là dessus pour finir avec cette solution plutôt pas mal est répondant totalement à ma demande :
La solution
Le principe donc :
Un gros div, avec une propriété cachant tout ce qui en dépasse.
A l'intérieur 4 autres div représentant chacun une partie du tableau (cellule centrale en haut à gauche, titre des colonnes, titre des lignes, données).
Chacun de ces divs contient un tableau avec les infos adéquats. Celui des données à une propriétés de scroll pour tout ce qui en dépasse.
Le div contenant les données réagis sur le onscroll afin de fournir, aux deux divs représentant les en-têtes de lignes et de colonnes, les nouvelles position par rapport au top et au left respectivent.
Bon, dit comme ça, c'est un peu pompeux.
En voici le code :
<html>
<head>
<style>
.general
{
position: absolute;
overflow: hidden;
width: 400px;
height:200px;
border: 1px solid;
}
.titre
{
width: 400px;
height: 50px;
background-color: #99CCCC;
}
.entete_l
{
position: absolute;
left: 100px;
top: 0px;
height: 50px;
background-color: #99CCCC;
}
.entete_c
{
position: absolute;
top: 50px;
left: 0px;
width: 100px;
background-color: #CCCCFF;
}
.donnees
{
position: absolute;
overflow: scroll;
left: 100px;
top: 50px;
width: 300px;
height: 150px;
background-color: #9999CC;
}
</style>
<script type="text/javascript">
function doOnScroll(mondiv)
{
document.getElementById("colonne").style.top=(50-mondiv.scrollTop)+"px"
document.getElementById("ligne").style.left=(100-mondiv.scrollLeft)+"px"
}
</script>
</head>
<body>
<div class="general">
<div z-index=1 class="titre">
<table width=100 height=50 border=1>
<tr>
<td width=100>Titre</td>
</tr>
</table>
</div>
<div z-index=2 id="ligne" class="entete_l">
<table width=500 height=50 border=1>
<tr>
<td width=100>Alpha</td>
<td width=100>Beta</td>
<td width=100>Gamma</td>
<td width=100>Omega</td>
<td width=100>Upsilon</td>
</tr>
</table>
</div>
<div z-index=1 id="colonne" class="entete_c">
<table width=100 height=200 border=1>
<tr height=50>
<td>Ligne 1</td>
</tr>
<tr height=50>
<td>Ligne 2</td>
</tr>
<tr height=50>
<td>Ligne 3</td>
</tr>
<tr height=50>
<td>Ligne 4</td>
</tr>
</table>
</div>
<div class="donnees" onscroll="doOnScroll(this);">
<table width=500 height=200 border=1>
<tr height=50>
<td width=100>1</td>
<td width=100>2</td>
<td width=100>3</td>
<td width=100>4</td>
<td width=100>5</td>
</tr>
<tr height=50>
<td width=100>1</td>
<td width=100>2</td>
<td width=100>3</td>
<td width=100>4</td>
<td width=100>5</td>
</tr>
<tr height=50>
<td width=100>1</td>
<td width=100>2</td>
<td width=100>3</td>
<td width=100>4</td>
<td width=100>5</td>
</tr>
<tr height=50>
<td width=100>1</td>
<td width=100>2</td>
<td width=100>3</td>
<td width=100>4</td>
<td width=100>5</td>
</tr>
</table>
</div>
</div>
</body>
Maintenant, c'est pas parfait, loin de là...
Et la principale, c'est bien évidement (vous l'aurez remarqué en testant) :
Le div en haut à gauche reste tout en dessous. Je n'ai toujours pas trouvé comment le faire passer au dessus. ainsi les 2 div d'en-têtes glisseront en dessosu et disparaitront.
Et le 2nd défaut, c'est que celà ne marche pas sous opera. J'aurais plutôt cru netscape, mais non.
Donc ça fonctionne sous FF, IE et Netscape.
Voilà, si vous avez une solution pour mon autre problème, je susi preneur !
Merci !