"Retour haut de page" masquable

"Retour haut de page" masquable - HTML/CSS - Programmation

Marsh Posté le 06-01-2006 à 18:56:26    

Voilà, je suis en train de terminer un site perso en PHP.
 
Comme ce site contient plusieurs pages, des longues (où il faut scroller la fenetre du navigateur) comme des petites (qui ne nécéssitent pas la scrollbar du navigateur), je voudrais donc faire un lien "retour vers le haut" du type ancre tout simple :
 

Code :
  1. <a href="#top">Retour en haut</a>


 
Mais mon pb, c que je voudrais que ce lien s'affiche si la page est longue, et ne s'affiche pas si la page est courte car ça ferait con sinon (pourquoi afficher un lien "retour en haut" alors que ce n'est pas nécessaire !!).
 
Donc forcément, ça sera du code Javascript puisque cette détection (afficher le lien "Retour en haut" ) est à faire coté client (sur son navigateur à lui).
Alors j'ai déjà testé pas mal de truc, ça fait une journée que je rame :whistle: , j'en ai marre ! :kaola: Si vous avez une solution... :jap:  
 

<script language="javascript">
var coderetour = '';
if(document.height > window.innerHeight)
/* J'ai essayé aussi avec :
if(window.scrollbars.visible) */
{
 coderetour = '<a href="#top">Retour haut de page</a>';
 document.write(coderetour);
}
</script>


 
Ou encore ça par exemple par un inner.HTML :
 

<script language="javascript">
function retourhaut()
{
 var coderetour = '';
 if(window.style.overflow)
 {
  coderetour = '<a href="#top">Retour haut de page</a>';
  retourh.innerHTML = coderetour;
 }
}
window.onload = function() { retourhaut(); }
</script>
<div id="retourh" align="center"></div>

Reply

Marsh Posté le 06-01-2006 à 18:56:26   

Reply

Marsh Posté le 06-01-2006 à 20:09:41    

Ta detection pour les tailles sont bonnes mais seulement pour Firefox et autres vrais navigateurs, pour IE tu l'auras dans le cul.
 
alors je te propose une solution qui se base sur une technique toute conne avec les CSS
si la hauteur du document est inférieur à la hauteur de la fenetre alors on applique une classe au body
 
cette classe est définie comme suit :  
 
.notoplink .toplinks{ display:none}
du coup tous les liens de type toplink seront cachés systématiquement.
 
Pour pouvoir avoir la hauteur du document sous IE j'ai du feinter, en gros pour la hauteur de la fenetre on recupère la hauteur du document HTML à l'écran (clientHeight) et pour la longueur du document, on recupère la hauteur du HTML à dans le document(scrollHeight), je trouve cela crade mais ça fonctionne parfaitement.
 
PS : pense à mettre le code javascript dans un fichier JS séparé
 
<script type="text/javascript src="monfichier.js"></script>
 
et idem pour la CSS
 
PS2 : la fonction se lance aussi automatiquement lorsque l'on redimensionne la fenêtre :o
 
PS3 : JE te remercie grace à toi j'ai appris quelque chose ce soir. j'ai fait ca en 20 minutes le temps de trouver comment detecter une hauteur de document et une hauteur de fenetre sous IE

Code :
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <head>
  4. <title></title>
  5. <script type="text/javascript">
  6. function CheckHeight(){
  7.  myBody = document.getElementsByTagName("BODY" )[0];
  8.  myHTML = document.getElementsByTagName("HTML" )[0];
  9. if (document.all) { //IE
  10.  var hauteurFen = (myHTML.clientHeight);
  11.  var hauteurDoc = (myHTML.scrollHeight);
  12. }
  13. else { //Autres vrais navigateurs
  14.  var hauteurFen = (window.innerHeight);
  15.  var hauteurDoc = (document.height);
  16. }
  17.  if (hauteurDoc>hauteurFen) {
  18.   myBody.className = "";
  19.  }
  20.  else {
  21.   myBody.className= "notoplink";
  22.  }
  23. }
  24. window.onload = CheckHeight;
  25. window.onresize = CheckHeight;
  26. </script>
  27. <style>
  28. *{
  29.  margin:0;
  30.  padding:0;
  31. }
  32. .notoplink .toplink{
  33.  display:none;
  34. }
  35. </style>
  36. </head>
  37. <body>
  38. <div id="top">
  39. <h2>Haut de la page tête d'ampoule</h2>
  40. <a href="#top" class="toplink">Haut de la page</a>
  41. <br>
  42. dfdsfdsfds
  43. fdsfdsf<br>
  44. fdgdfgdfgdfg<br>
  45. <br>
  46. <br>
  47. <br>
  48. <br>
  49. <br>
  50. fdsfdsf<br>
  51. fdgdfgdfgdfg<br>
  52. <br>
  53. <a href="#top" class="toplink">Haut de la page</a>
  54. dfdsfdsfds
  55. fdsfdsf<br>
  56. fdgdfgdfgdfg<br>
  57. <br>
  58. dfdsfdsfds
  59. fdsfdsf<br>
  60. fdgdfgdfgdfg<br>
  61. <a href="#top" class="toplink">Haut de la page</a>
  62. </div>
  63. </body>
  64. </html>


Message édité par gatsu35 le 06-01-2006 à 20:37:57
Reply

Marsh Posté le 06-01-2006 à 20:17:30    

/!\ Pensez à reprendre le script maintenant je viens de le mettre a jour :o /!\

Reply

Marsh Posté le 06-01-2006 à 20:29:49    

Ah le nouveau truc de HFR pour la balise CODE est pourrave, faut faire un C/C dans wordpad puis refaire un C/C dans ton editeur favoris a partir de wordpad si tu veux que ton code soit propre

Reply

Marsh Posté le 06-01-2006 à 20:51:21    

Attention !!! de toute manière c'est une solution bancale de toute manière, sous Opera ca marche po !
 
car je fais un if document.all et opera passe pour du IE a ce moment là.  
 
J'abandonne pour ce soir, j'ai la flème !

Reply

Marsh Posté le 06-01-2006 à 20:56:56    

Ok merci pour toute cette aide !
C exactement ce que je voulais ! Ca fonctionne impeccable !
 
Finallement, j'étais pas trop loin car ça fonctionnait sous Firefox, mais pas avec (cette connerie d') Internet Explorer ! :/
 
Merci encore une fois, et pour le window.onresize c très judicieux ! ;)

Reply

Marsh Posté le 06-01-2006 à 20:58:45    

ca marche po sous opera neanmoins

Reply

Marsh Posté le 06-01-2006 à 21:06:02    

Po grave pour Opera ! loool Yzon ka tous utiliser Firefox ! :P
 
Et j'ai prévu aussi une balise <noscript><a href="#top"></noscript> au cas où, sait-on jamais ! :D

Reply

Marsh Posté le 06-01-2006 à 21:07:35    

ta po besoin de ta balise <noscript> a deux balles
si ya po javascript, mes <a> sont quand meme affichés si tu regardais bien mon code
les A son cachés par le JS et sans JS ils apparaissent kan meme

Reply

Marsh Posté le 07-01-2006 à 11:50:17    

Nan, bon ça foire tjrs sous IE !  :heink: (sous FireFox par contre nickel) !
Je sais pas comment, pourtant hier soir il me semblait que ça fonctionnait...
Revoici mon code, légèrement modifié :
 

Code :
  1. <html>
  2. <head>
  3. <title>xxxxxxxxxxx</title>
  4. <link href="images/style.css" rel="stylesheet" type="text/css">
  5. <script src="images/fonctions.js" type="text/javascript"></script>
  6. </head>
  7. <body onLoad="javascript:CheckHeight();">
  8. ...
  9. <br>
  10. <br>
  11. <br>
  12. <br>
  13. <br>
  14. <br>
  15. <br>
  16. <br>
  17. <br>
  18. <br>
  19. <br>
  20. <br>
  21. <br>
  22. <br>
  23. <br>
  24. <br>
  25. <br>
  26. <div id="retourhaut" align="center"></div>
  27. </body>
  28. </html>


 
 
Le fichier "fonctions.js" :
 

Code :
  1. function CheckHeight()
  2. {
  3. var myBODY = document.getElementsByTagName('BODY')[0];
  4. var myHTML = document.getElementsByTagName('HTML')[0];
  5. var coderetourhaut;
  6. if((navigator.appName == 'Microsoft Internet Explorer')||(document.all))
  7. {
  8.  var hauteurFen = (myHTML.clientHeight);
  9.  var hauteurDoc = (myHTML.scrollHeight);
  10. } else {
  11.  var hauteurFen = (window.innerHeight);
  12.  var hauteurDoc = (document.height);
  13. }
  14. if(hauteurDoc > hauteurFen)
  15. {
  16. /* myBODY.className = ''; */
  17.  coderetourhaut = '      <table width="100%">';
  18.  coderetourhaut = coderetourhaut + '       <tr>';
  19.  coderetourhaut = coderetourhaut + '        <td class="framecentrale">';
  20.  coderetourhaut = coderetourhaut + '         <a href="#top">Retour haut de page</a>';
  21.  coderetourhaut = coderetourhaut + '        </td>';
  22.  coderetourhaut = coderetourhaut + '       </tr>';
  23.  coderetourhaut = coderetourhaut + '      </table>';
  24.  retourhaut.innerHTML = coderetourhaut;
  25. } else {
  26. /* myBODY.className = 'notoplink'; */
  27.  coderetourhaut = '';
  28.  retourhaut.innerHTML = coderetourhaut;
  29. }
  30. window.onload = CheckHeight;
  31. window.onresize = CheckHeight;
  32. }

Reply

Marsh Posté le 07-01-2006 à 11:50:17   

Reply

Marsh Posté le 07-01-2006 à 11:55:27    

sale boulet
 pourquoi tu ne t'es pas basé sur ma méthode des classe ?

Code :
  1. .notoplink .toplink{ 
  2.       display:none;   
  3. }


 
et  <a href="#top" class="toplink">Retour haut de page</a>
comme ca par défaut les liens sont affichés normalement, et avec le javascript on check la hauteur de page, et si page<fenetre alors on assigne une classe CSS à l'élément body, et automatiquement tous les éléments avec la classe "toplink" seront cachés.
Dans le cas contraire on vire la classe sur la body et les éléments sont réaffichés.
ca fait du HTML propre.
 
et vire moi ce putain de code là :  
<body onLoad="javascript:CheckHeight();">
 
il est rajouté en JS automatiquement.
 
J'en ai ras la bol des gens qui n'ecoutent pas ce qu'on leur dit et qui pondent de la merde.
 
au fait tu as vraiment besoin d'encadrer ton putain de lien avec un tableau ? tu crois que c'est vraiment utile ?

Reply

Marsh Posté le 07-01-2006 à 12:22:39    

gatsu35 a écrit :

<body onLoad="javascript:CheckHeight();">
il est rajouté en JS automatiquement.
...
au fait tu as vraiment besoin d'encadrer ton putain de lien avec un tableau ? tu crois que c'est vraiment utile ?


Je te remercie pour ton aide, mais ce n'est pas la peine de me traiter de "sale boulet" ! :o C vrai qu'avec tous ces navigateurs, on a tendance à s'énerver ! lol :lol: Mais ne te sens pas obligé de m'aider si tu en as marre ! lol :) Tu en as déjà fait bcp comme ça, merci encore ! ;)  
 
Si j'ai programmé ça, c qu'il y a des raisons ! :D Entr'autre, ton système ne fonctionne que si est inséré le code suivant :

Code :
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">


 
Hors, si moi j'insère ce code dans mes pages, il me déstructure complètement tout, et mon site ne ressemble plus à rien ! Aussi bien sous IE que sous FireFox ! Donc, je dois forcément me passer de ce code ; et du système de myBODY.class = "" forcément, car sans le DOCTYPE, ta page ne fonctionne pas ! ;)
 
 
Pour le <body onLoad="javascript:CheckHeight();">, là c vrai, c une erreur de ma part, j'ai oublié de mettre en commentaire le //window.onload = ChekHeight;. Mais j'ai fait les tests avec les 2, et ça n'a pas fonctionné.
 
 
Pour ce qui est du tableau, oui, je suis obligé de le mettre dans un tableau. J'ai préféré construire mon site sur des tableaux plutot qu'avec cette m**** de CSS  :kaola: ! Et comme j'inclus en PHP (include) des pages HTML dans ma page principale PHP avec des menus, je suis obligé d'utilisé systématiquement des tableaux.
 
Je vais essayer avec une autre méthode, celle des calques que l'on rend visible ou pas ; ça me parait correct. J'ai trouvé des infos ici :
http://developpeur.journaldunet.co [...] trer.shtml
Je dirais si ça fonctionne ou pas. ;)

Reply

Marsh Posté le 07-01-2006 à 12:37:15    

un site sans doctype n'est pas un site, ca prouve que la personne qui a fait le site ne sait pas ce qu'elle fait
un site avec des tableau n'est pas un site c'est un truc moche
 
les CSS c'est pas de la merde, ca permet d'intégrer ce que l'on veut finger in the noze, et crois moi, j'en ai fait l'expérience, j'ai toujours eu des resultats concluants la dessus

Reply

Marsh Posté le 09-01-2006 à 23:45:25    

Bon, j'ai refais qques tests cette fois avec des balises <SPAN>, bcp plus pratique et standard, et là pas nécessité de balises <NOSCRIPT>.
Mais rien n'y fait ! :fou: Tout fonctionne (sous Firefox), mais par contre sous I.E., rien à faire, même avec le test de compatibilité multi-navigateurs des fonctions Javascript "montrer(object)" et "cacher(object)" ! :fou:  
Revoici mon code optimisé, si vous avez une quelconque solution à apporter, je suis preneur, mais moi j'abandonne (marre de cette "guerre" entre navigateurs ! Nous revoilà revenu 5 ans en arrière au temps de IE et Netscape Navigator ! :fou: Vive la paix ! :D )
 
ma page.php : (remarquez, j'ai mis le <SPAN> en "visible", ainsi pas besoin de prévoir une balise <NOSCRIPT> )

Code :
  1. <html>
  2. <head>
  3. <title>xxxxxxx</title>
  4. <meta etc...>
  5. ...
  6. <script src="images/fonctions.js" type="text/javascript"></script>
  7. </head>
  8. <body onLoad="javascript: Checkheight('RetourHaut');" onResize="javascript: Checkheight('RetourHaut');">
  9. ...
  10. <br>
  11. <br>
  12. <br>
  13. <br>
  14. <br>
  15. <br>
  16. <br>
  17. <br>
  18. <br>
  19. <br>
  20. <br>
  21. <br>
  22. <span id="RetourHaut" style="visibility: visible;">
  23. <a href="#top">Retour haut de page</a>
  24. </span>
  25. <br>
  26. <br>
  27. <br>
  28. <br>
  29. <br>
  30. </body>
  31. </html>


 
Mon fichier fonctions.js :

Code :
  1. function montrer(object)
  2. {
  3. if(document.all)  // Si c'est Internet Explorer
  4. {
  5.  document.all[object].style.visibility = 'visible';
  6.  document.all[object].style.zIndex = 100;
  7. }
  8. else if(document.layers && document.layers[object])
  9. {
  10.  document.layers[object].visibility = 'visible';
  11. }
  12. else if(document.getElementById)
  13. {
  14.  document.getElementById(object).style.visibility = 'visible';
  15.  document.getElementById(object).style.zIndex = 100;
  16. }
  17. }
  18. function cacher(object)
  19. {
  20. if(document.all)  // Si c'est Internet Explorer
  21. {
  22.  document.all[object].style.visibility = 'hidden';
  23. }
  24. else if(document.layers && document.layers[object])
  25. {
  26.  document.layers[object].visibility = 'hidden';
  27. }
  28. else if(document.getElementById)
  29. {
  30.  document.getElementById(object).style.visibility = 'hidden';
  31. }
  32. }
  33. function Checkheight(object)
  34. {
  35. var myHTML = document.getElementsByTagName('HTML')[0];
  36. if(document.all)  // Si c'est Internet Explorer
  37. {
  38.  var hauteurFen = myHTML.clientHeight;
  39.  var hauteurDoc = myHTML.scrollHeight;
  40. }
  41. else     // Si ce sont d'autres navigateurs
  42. {
  43.  var hauteurFen = window.innerHeight;
  44.  var hauteurDoc = document.height;
  45. }
  46. if(hauteurDoc > hauteurFen)
  47. {
  48.  montrer(object);
  49. }
  50. else
  51. {
  52.  cacher(object);
  53. }
  54. }


Message édité par poulou59 le 09-01-2006 à 23:47:30
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed