Jump to content
php.lv forumi

Peles klikšķa pozīcija


Kaklz

Recommended Posts

Problēma šāda:

 

Ir dokuments (pietiekoši garš, sanāk arī pascrollēt), kura apakšā ir forma. Vienā no formas laukiem vajadzētu ievadīt datumu. Tad nu ar JavaScript līdzekļiem tiek uztaisīts <div> elements, kas satur vizuālu kalendāru un ar position: absolute tiek nopozicionēts vajadzīgajā vietā. Viss strādā lieliski uz FireFox un Opera, IE kā vienmēr māk atgādināt par sevi.

 

Kods, kas tiek izmantots peles atrašanās vietas noteikšanai ir šāds:

   var mouseX;
   var mouseY;
   var isIE = document.all?true:false;
   if (!isIE) document.captureEvents(Event.MOUSEMOVE);

   document.onmousemove = getMousePosition;
   function getMousePosition(e) {
       if (!isIE) {
           x = e.pageX;
           y = e.pageY;
       }
       if (isIE) {
           x = event.clientX + document.body.scrollLeft;
           y = event.clientY + document.body.scrollTop;
       }
       mouseX=x;
       mouseY=y;
       return true;
   }

 

Cik nu mēģināju atrast problēmu, sapratu, ka IE nez kāpēc neuzstāda savu document.body.scrollTop vērtību, attiecīgi mans ģenerētais kalendārs parādās nevis peles klikšķa vietā, bet daudz augstāk dokumentā, neņemot vērā uz leju paritināto daļu.

 

Varbūt kādam ir kādas idejas, kur ir problēma, kāpēc IE neuzstāda document.body.scrollTop ?

 

Varbūt ir kāds cits, labāks veids, kā parādīt kādu <div> elementu peles klikšķa vietā, kā sekot līdzi peles kustībām?

 

Paldies!

Link to comment
Share on other sites

Kā būtu, ja scrollēšanas pozīcijas noteiktu šādi:

 scrollTop = (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
 scrollLeft = (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);

 

Kautgan īsti nesaprotu, kam te vajadzīgas peles koordinātes. Vai tad nevar kalendāru palikt, piemēram zem vajadzīgā formas lauka?

 var e = document.getElementById("datuma_ievades_lauks");
 var cal = document.getElementById("kalendaara_divs");
 cal.style.top = e.offsetTop + e.offsetWidth + "px";
 cal.style.left = e.offsetLeft + "px";

(protams, offseti dod relatīvās koordinātes, bet izrēķināt absolutās ar vienkāršu ciklu nav grūti.

P.S.

var isIE = document.all?true:false;

Vai tad uz FF 1.0 versijām arī nav implementēts document.all ?

Edited by bubu
Link to comment
Share on other sites

Kā būtu, ja scrollēšanas pozīcijas noteiktu šādi:

 scrollTop = (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
 scrollLeft = (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);

15019[/snapback]

 

 

Paldies, tagad viss strādā kā nākas!

 

Vai tad uz FF 1.0 versijām arī nav implementēts document.all ?

15019[/snapback]

 

Ir gan, to arī pielabošu, bet nu būtībā jau vienalga, galvenais jau, ka uz FF un Opera strādā :)

Link to comment
Share on other sites

Kautgan īsti nesaprotu, kam te vajadzīgas peles koordinātes. Vai tad nevar kalendāru palikt, piemēram zem vajadzīgā formas lauka?

 var e = document.getElementById("datuma_ievades_lauks");
 var cal = document.getElementById("kalendaara_divs");
 cal.style.top = e.offsetTop + e.offsetWidth + "px";
 cal.style.left = e.offsetLeft + "px";

(protams, offseti dod relatīvās koordinātes, bet izrēķināt absolutās ar vienkāršu ciklu nav grūti.

15019[/snapback]

 

Arī interesants piegājiens, iespējams, ka pat labāks :)

 

Paldies!

Link to comment
Share on other sites

×
×
  • Create New...