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

Contribuez Discussion :

[SRC]/[FAQ] Savoir si la scrollBar d'un controle est en bas


Sujet :

Contribuez

  1. #1
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 289
    Points
    3 289
    Par défaut [SRC]/[FAQ] Savoir si la scrollBar d'un controle est en bas
    Code html : 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
    <html><body onload="
        setInterval(function() {
            var h = document.getElementById('h');
            var d = document.getElementById('textEdit1');
            h.value = (d.scrollTop + d.clientHeight - d.scrollHeight) + 'px';
        }, 10)
    ">
        Position du scroll (apd. du bas) : <input style="border: none; width: 75px;" readonly="true" type="text" id="h" />
        <div class="textEdit" id="textEdit1" style="height: 300px; width: 300px; overflow: auto; border: inset" ContentEditable="true">
            ..........................................................................................................................................................................................................................................................
            <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
            <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
            <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
            <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
            <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
            <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
            <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
            <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
            <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
            <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
        </div>
     
        <style type="text/css"><!--
            .textEdit p {
                margin: 0px;
            }
        --><style>
    </body></html>
    La partie intéressante du code étant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Soit "d" un objet HTML (ici une balise DIV)
    (d.scrollTop + d.clientHeight - d.scrollHeight)
    PS: Cet exemple se comportera de manière un peu différente entre IE et FF dans la mesure où l'on pourra changer le contenu de la DIV avec IE mais pas avec FF
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  2. #2
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 289
    Points
    3 289
    Par défaut
    Attention, je viens de constater un problème de compatibilité avec OPERA dans le cas ou la DIV possède une scrollBar horizontale...

    Dans ce cas, la valeur obtenue est -17 au lieu de 0, et donc le code ne peut pas fonctionner... Bon ben la faut faire un test particulier pour OPERA
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  3. #3
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Pas moins -17, mais -16. Sinon fichu Opera quand meme avec son JS limité...
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  4. #4
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 289
    Points
    3 289
    Par défaut
    Citation Envoyé par cerede2000
    Pas moins -17, mais -16. Sinon fichu Opera quand meme avec son JS limité...
    Ah, x
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  5. #5
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 289
    Points
    3 289
    Par défaut
    Citation Envoyé par cerede2000
    Pas moins -17, mais -16. Sinon fichu Opera quand meme avec son JS limité...
    Ah, ça c'est ennuyeux, car chez moi c'est -17, je suis formel...

    Ben on peut essayer de remplacer clientHeight par offsetHeight, si ca marche pas, alors tant pis pour opéra
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  6. #6
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Ah oui ennuyeux si on a pas la meme valeur sur Opera plus galere :S Moi j'ai -16 formel aussi

    Ben on peut essayer de remplacer clientHeight par offsetHeight, si ca marche pas, alors tant pis pour opéra
    La du coup j'obtient 6 :S
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  7. #7
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 289
    Points
    3 289
    Par défaut
    1) Si ca marchais sur OPERA, il aurait fallu faire un test rien que pour lui, vu que offsetH tient compte de la scrollBar et renvoie donc 23 sur FF et 25 sur IE, ce qui ne marche pas

    2) Sur OPERA, je crois que ca marche, mais que ca compte les bordures (ben oui, forcément 3 au dessus et 3 en dessous ca fait 6), vu que si je mets border: none, ca marche...

    ==> Si on veut, on peut y arriver avec opéra, mais cela reste plus difficile qu'avec le reste et surtout... ca demande d'allonger le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // PSEUDO-CODE
    if (OPERA) {
       H = (offsetH - borderH)
    } else {
       H = clientH
    }
    return (scrollTop + H - scrollHeight);
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  8. #8
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    J'ai mit ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    setInterval(function() {
    		var h = document.getElementById('h');
    		var d = document.getElementById('textEdit1');
    		if(navigator.appName == 'Opera') {
    			H = (d.offsetHeight - d.borderHeight);
    		}
    		else {
    			H = d.clientHeight;
    		}
    		h.value = (d.scrollTop + H - d.scrollHeight) + 'px';
    		}, 10)
    Opera me dit: NaNpx, il aime pas quoi?

    Edit: Arf, d.borderHeight undefined ...
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  9. #9
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 289
    Points
    3 289
    Par défaut
    ah oui, je te l'ai dit, c'est du pseudo-code, borderHeight, ca n'existe pas

    Faut le calculer àpd du currentStyle.border(Bottom/Top)Width, ...
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  10. #10
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Eu tu pourrai etre plus précis pour le calcul
    Merci
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  11. #11
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 289
    Points
    3 289
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var borderHeight = 0;
    switch (d.currentStyle.borderTopWidth) {
      case "": 
        break;
      case "thin":
        borderHeight+=1; break;
      case "medium":
        borderHeight+=3; break;
      case "large":
        borderHeight+=6; break;
      default:
        borderHeight+=parseInt(d.currentStyle.borderTopWidth); break;
    }
    Pis tu fais la même chose pour borderBottomWidth et tu regarde ce que cela donne
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  12. #12
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Ca a l'air pas trop mal:
    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
    setInterval(function() {
    		var h = document.getElementById('h');
    		var d = document.getElementById('textEdit1');
    		if(navigator.appName == 'Opera') {
    			var borderHeight = 0;
    			switch(d.currentStyle.borderTopWidth) {
    				case '':
    				break;
    				case 'thin':
    					borderHeight+=1;
    				break;
    				case 'medium':
    					borderHeight+=3;
    				break
    				case 'large':
    					borderHeight+=6;
    				break;
    				default:
    					borderHeight+=parseInt(d.currentStyle.borderTopWidth);
    				break;
    			}
    			H = (d.offsetHeight - borderHeight);
    			alert(borderHeight);
    		}
    		else {
    			H = d.clientHeight;
    		}
    		h.value = (d.scrollTop + H - d.scrollHeight) + 'px';
    		}, 10) "
    Par contre j'ai encore un decalage de 3px... D'ou peut il venir
    Apparemment en doublant borderHeight c'est bon ce qui parrait logique, 1 en haut et 1 en bas
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  13. #13
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 289
    Points
    3 289
    Par défaut
    Soit doubler, soit faire le même calcul pour borderBottomWidth (on sait jamais, ils peuvent avoir des tailles différentes)
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  14. #14
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Bien donc voici le code qui marche pour FF, IE et Opera
    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
     
    setInterval(function() {
    	var h = document.getElementById('h');
    	var d = document.getElementById('textEdit1');
    	if(navigator.appName == 'Opera') {
    		var borderHeight = 0;
    		switch(d.currentStyle.borderTopWidth) {
    			case '':
    			break;
    			case 'thin':
    				borderHeight+=1;
    			break;
    			case 'medium':
    				borderHeight+=3;
    			break
    			case 'large':
    				borderHeight+=6;
    			break;
    			default:
    				borderHeight+=parseInt(d.currentStyle.borderTopWidth);
    			break;
    		}
    		switch(d.currentStyle.borderBottomWidth) {
    			case '':
    			break;
    			case 'thin':
    				borderHeight+=1;
    			break;
    			case 'medium':
    				borderHeight+=3;
    			break
    			case 'large':
    				borderHeight+=6;
    			break;
    			default:
    				borderHeight+=parseInt(d.currentStyle.borderBottomWidth);
    			break;
    		}
    		H = (d.offsetHeight - borderHeight);
    	}
    	else {
    		H = d.clientHeight;
    	}
    	h.value = (d.scrollTop + H - d.scrollHeight) + 'px';
    }, 10)
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  15. #15
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 289
    Points
    3 289
    Par défaut
    Parfait !
    Si qqun pouvait tester sous safari...
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

Discussions similaires

  1. [JavaScript] [SRC]/[FAQ] Les templates JS pour accelerer le chargement des pages
    Par FremyCompany dans le forum Contribuez
    Réponses: 20
    Dernier message: 23/12/2006, 10h58
  2. Réponses: 3
    Dernier message: 31/07/2006, 09h34
  3. [JScrollPane]Comment savoir quand une scrollbar apparait ?
    Par FrigoAcide dans le forum Composants
    Réponses: 4
    Dernier message: 29/04/2004, 10h10
  4. Comment savoir si les ScrollBar sont visibles sur un TRichEdit ?
    Par vanquish dans le forum Composants VCL
    Réponses: 2
    Dernier message: 16/10/2003, 10h28

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