Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, questions/réponses pour les FAQ, sources et autres ressources pour la rubrique Web ainsi que ses sous-rubriques.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/05/2007, 19h34   #1
Expert Confirmé
 
Avatar de FremyCompany
 
Étudiant
Inscription : février 2006
Messages : 2 532
Détails du profil
Informations personnelles :
Âge : 20

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2006
Messages : 2 532
Points : 2 903
Points : 2 903
Envoyer un message via MSN à FremyCompany
Par défaut [SRC]/[FAQ] Savoir si la scrollBar d'un controle est en bas

Code html :
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 :
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
FremyCompany est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2007, 19h41   #2
Expert Confirmé
 
Avatar de FremyCompany
 
Étudiant
Inscription : février 2006
Messages : 2 532
Détails du profil
Informations personnelles :
Âge : 20

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2006
Messages : 2 532
Points : 2 903
Points : 2 903
Envoyer un message via MSN à FremyCompany
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
FremyCompany est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2007, 20h23   #3
Membre expérimenté
 
Étudiant
Inscription : juillet 2004
Messages : 777
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2004
Messages : 777
Points : 527
Points : 527
Pas moins -17, mais -16. Sinon fichu Opera quand meme avec son JS limité...
cerede2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2007, 20h59   #4
Expert Confirmé
 
Avatar de FremyCompany
 
Étudiant
Inscription : février 2006
Messages : 2 532
Détails du profil
Informations personnelles :
Âge : 20

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2006
Messages : 2 532
Points : 2 903
Points : 2 903
Envoyer un message via MSN à FremyCompany
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
FremyCompany est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2007, 21h02   #5
Expert Confirmé
 
Avatar de FremyCompany
 
Étudiant
Inscription : février 2006
Messages : 2 532
Détails du profil
Informations personnelles :
Âge : 20

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2006
Messages : 2 532
Points : 2 903
Points : 2 903
Envoyer un message via MSN à FremyCompany
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
FremyCompany est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2007, 21h36   #6
Membre expérimenté
 
Étudiant
Inscription : juillet 2004
Messages : 777
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2004
Messages : 777
Points : 527
Points : 527
Ah oui ennuyeux si on a pas la meme valeur sur Opera plus galere :S Moi j'ai -16 formel aussi

Citation:
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
cerede2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2007, 21h58   #7
Expert Confirmé
 
Avatar de FremyCompany
 
Étudiant
Inscription : février 2006
Messages : 2 532
Détails du profil
Informations personnelles :
Âge : 20

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2006
Messages : 2 532
Points : 2 903
Points : 2 903
Envoyer un message via MSN à FremyCompany
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 :
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
FremyCompany est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2007, 22h16   #8
Membre expérimenté
 
Étudiant
Inscription : juillet 2004
Messages : 777
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2004
Messages : 777
Points : 527
Points : 527
J'ai mit ceci:
Code :
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 ...
cerede2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2007, 18h15   #9
Expert Confirmé
 
Avatar de FremyCompany
 
Étudiant
Inscription : février 2006
Messages : 2 532
Détails du profil
Informations personnelles :
Âge : 20

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2006
Messages : 2 532
Points : 2 903
Points : 2 903
Envoyer un message via MSN à FremyCompany
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
FremyCompany est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2007, 19h19   #10
Membre expérimenté
 
Étudiant
Inscription : juillet 2004
Messages : 777
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2004
Messages : 777
Points : 527
Points : 527
Eu tu pourrai etre plus précis pour le calcul
Merci
cerede2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2007, 21h33   #11
Expert Confirmé
 
Avatar de FremyCompany
 
Étudiant
Inscription : février 2006
Messages : 2 532
Détails du profil
Informations personnelles :
Âge : 20

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2006
Messages : 2 532
Points : 2 903
Points : 2 903
Envoyer un message via MSN à FremyCompany
Code :
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
FremyCompany est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2007, 22h20   #12
Membre expérimenté
 
Étudiant
Inscription : juillet 2004
Messages : 777
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2004
Messages : 777
Points : 527
Points : 527
Ca a l'air pas trop mal:
Code :
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
cerede2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2007, 16h45   #13
Expert Confirmé
 
Avatar de FremyCompany
 
Étudiant
Inscription : février 2006
Messages : 2 532
Détails du profil
Informations personnelles :
Âge : 20

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2006
Messages : 2 532
Points : 2 903
Points : 2 903
Envoyer un message via MSN à FremyCompany
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
FremyCompany est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2007, 17h25   #14
Membre expérimenté
 
Étudiant
Inscription : juillet 2004
Messages : 777
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2004
Messages : 777
Points : 527
Points : 527
Bien donc voici le code qui marche pour FF, IE et Opera
Code :
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)
cerede2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2007, 18h30   #15
Expert Confirmé
 
Avatar de FremyCompany
 
Étudiant
Inscription : février 2006
Messages : 2 532
Détails du profil
Informations personnelles :
Âge : 20

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2006
Messages : 2 532
Points : 2 903
Points : 2 903
Envoyer un message via MSN à FremyCompany
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
FremyCompany est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h02.


 
 
 
 
Partenaires

Hébergement Web