Bonjour à tous.
Je profite de mon heure de diner pour vous soumettre un problème qui me coupe beaucoup d'heures de sommeil ces derniers temps.


Avant de commencer, note aux modo/admin:
Pourquoi n'y a t-il pas une section javascript générale dans laquelle je peux poster ma question ? Ceci n'est ni une contribution, ni un article, ni rien qui puisse être classifié dans les catégories disponibles. Alors j'ai choisi Prototype, vu que je l'utilise, mais ca n'a aucun lien direct.


Voici une fonction de détection de position du curseur que tout le monde semble vénéré à tort:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
findPosY = function(obj){
  var curtop =0;
  if(obj.offsetParent){
     while(obj.offsetParent){
       curtop += obj.offsetTop;
       obj.parentOffset;
     }
   }
   return curtop;
}
Je dis à tord pour 2 raisons qui me pose problème.
La première est que cette fonction ne retournera pas un bon résultat si l'élément déclanchant l'évènement est situé à l'intérieur d'une ou plusieurs zones en position:absolute ou position:relative.

Le second cas de figure que j'ai trouvé dans lequel cette fonction retournera une valeur incorrecte est lorsque l'élément déclanchant l'évènement est situé à l'intérieur d'une zone en overflow:scroll-y. Dès que la zone n'est plus en position scrollTop==0, la valeur scrollTop n'est pas soustraite du total, et PAF! la position de curseur est rendu 400px trop bas.

Là où c'est un problème, c'est que dans plusieurs cas, la zone en overflow:scroll-y (ou auto) n'est pas un parentOffset. Pour être un parentOffset, il semble falloir que la zone représente aux yeux du navigateur une altération de l'offset. Si vous avez un DIV top:0, margin-top:0, padding-top:0, border-top:0, l'offset ne sera pas modifié par cet élément, et la boucle de récursion ne tombera pas sur le DIV avec le scroll.

Alors j'ai essayé de remplacer obj.parentOffset par obj.parentNode, afin de boucler dans tous les éléments. Mais ma solution m'apporte un nouveau problème. Certe, le scrollTop requis est maintenant retiré, mais j'ai tout un tas d'éléments qui semblent avoir des valeurs offsetTop dont je me fout éperduement et qu'il ne devrait pas être prises en compte.


Bref, comment puis-je RÉELLEMENT connaitre la position du curseur sur la page ? Ca m'importe peu de devoir utiliser une librairie de 50Kb, j'ai besoin d'une vrai solution.