Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript] Pozycja kursora
innowwwacje
post 16.03.2009, 20:08:30
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 21.08.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


W jaki sposób przy zdarzeniu onmouseover sprawdzić, pozycję kursora oraz diva?

Chodzi mi o taką sytuację. Mamy diva o szerokości 117px i wysokości 17px. Ten div jest w jakiejś tam sobie odległości od lewego, górnego rogu okna przeglądarki. Ten div jest pozycjonowany relatywnie. W tym divie istnieje sobie drugi div pozycjonowany absolutnie, a w nim tabela z podlinkowanymi ikonkami. Ten główny div ma dwa zdarzenia. onmouseout oraz onmouseover. Gdy mysz znajdzie się nad tym divem pojawia się div z tabelą znajdujący się bezpośrednio w nim. W teorii wszystko działa poprawnie jednakże w praktyce nie do końca. Sprawdzałem na przeglądarce FF oraz Opera. W obu przypadkach pojawia się problem. Umieszczenie kursora myszy na divie otwierającym liste ikon powoduje pokazanie listy ikon. Dalsze poruszanie w obrębie tego diva powoduje, że przeglądarka jakby głupieje i nie wie co zrobić. Raz wywołuje zdarzenie zdjęcia kursora myszy z diva, a raz zdarzenie umieszczenia kursora myszy na tym divie. Poniżej schemat.

  1. <div style="position: relative;" onmouseover="pokazikony" onmouseout="schowajikony">
  2. <div style="position: absolute; top: 0px; right: 0px;" id="ikony">
  3. <tr>
  4. <td>
  5. <a hef="adres"><img src="ikona" alt="" /></a>
  6. </td>
  7. </tr>
  8. </table>
  9. </div>
  10. </div>




Swoją drogą nie działa wstawianie kodu HTML w wyswigu forum więc wybaczcie, ale daję zwykłym tekstem. Z kolei po jednym enterze tworzy się akapit. Co wy porobiliście z tym forum? Kiedyś działało to znacznie lepiej...



Wracając do tematu. Wpadłem na pomysł, by w funkcji ze zdarzenia onmouseover pobierać pozycję kursora oraz diva, w którym występuje. Jeżeli kursor faktyczni znalazł się poza divem funkcja wykona się, a jeśli nie, nic nie zrobi.



Dlatego pytam, jak pobrać absolutną pozycję diva oraz absolutną pozycję kursora w funkcji JS?

Ten post edytował innowwwacje 17.03.2009, 12:35:21


--------------------
INNOWWWACJE - innowacyjne rozwiązania sieciowe

Tworzenie Stron i Serwisów WWW oraz Aplikacji Internetowych, Pozycjonowanie Stron Internetowych, Copywriting, Kreowanie Tożsamości Firmy i wiele więcej...

xHTML / CSS / JavaScript / AJAX / XML / PHP / SQL / MySQL
Zend Framework, jQuery, Lightbox, TinyMCE
Go to the top of the page
+Quote Post
Spawnm
post 16.03.2009, 20:57:26
Post #2





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




mysz to:
event.clientX
event.clientY
a div sprawdzaj po offsecie, czyli coś ala
var box = document.getElementById("box");
var lewy=box.offsetLeft;
Go to the top of the page
+Quote Post
innowwwacje
post 17.03.2009, 08:42:39
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 21.08.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Dobrych parę godzin szukałem i znalazłem. 



Taki skrypt:

  1.   <script language="JavaScript1.2">
  2. <!--
  3.  
  4. // Detect if the browser is IE or not.
  5. // If it is not IE, we assume that the browser is NS.
  6. var IE = document.all?true:false
  7.  
  8. // If NS -- that is, !IE -- then set up for mouse capture
  9. if (!IE) document.captureEvents(Event.MOUSEMOVE)
  10.  
  11. // Set-up to use getMouseXY function onMouseMove
  12. document.onmousemove = getMouseXY;
  13.  
  14. // Temporary variables to hold mouse x-y pos.s
  15. var tempX = 0
  16. var tempY = 0
  17.  
  18. // Main function to retrieve mouse x-y pos.s
  19.  
  20. function getMouseXY(e) {ldelim}
  21.   if (IE) {ldelim} // grab the x-y pos.s if browser is IE
  22.   tempX = event.clientX + document.body.scrollLeft
  23.   tempY = event.clientY + document.body.scrollTop
  24.   {rdelim} else {ldelim} // grab the x-y pos.s if browser is NS
  25.   tempX = e.pageX
  26.   tempY = e.pageY
  27.   {rdelim}  
  28.   // catch possible negative values in NS4
  29.   if (tempX < 0){ldelim}tempX = 0{rdelim}
  30.   if (tempY < 0){ldelim}tempY = 0{rdelim}  
  31.   return true
  32. }
  33.  
  34. //-->


Dajemy tuż przed </body> (najlepiej po wszystkich innych znacznikach). Powoduje on, że przy każdym ruchu myszy pozycja myszy zapisywana jest w zmiennych tempX oraz tempY są one dostępne z poziomu wszystkich innych skryptow. W ten spsosóbpozycja kursora jest zawsze dostępna. Funkcji nie trzeba specjalnie wywoływać (działa niejako w tle).

Z kolei pozycja elementu to rzecz trochę bardziej skomplikowana. Samo offsetLeft nie wystarczy, gdy element div jest w innych elementach typu divy, tabele itp. Ponizszy skrypt

  1. var pos_left = '';
  2. var pos_top = '';
  3.  
  4. function findPos(obj) {
  5.   var nleft = 0;
  6.   var ntop = 0;
  7.   if (obj.offsetParent) {
  8.   nleft = obj.offsetLeft
  9.   ntop = obj.offsetTop
  10.   while (obj = obj.offsetParent) {
  11.   nleft += obj.offsetLeft
  12.   ntop += obj.offsetTop
  13.   }
  14.   }
  15.    
  16.   pos_left = nleft;
  17.   pos_top = ntop;
  18. }



Zwraca dla dwóch zminnych pos_left oraz pos_top pozycję od góry i od lewej krawędzie ekranu danego elementu uwzględniając jego położenie w innych elementach.


Dzięki za pomoc.

Ten post edytował innowwwacje 17.03.2009, 12:36:01


--------------------
INNOWWWACJE - innowacyjne rozwiązania sieciowe

Tworzenie Stron i Serwisów WWW oraz Aplikacji Internetowych, Pozycjonowanie Stron Internetowych, Copywriting, Kreowanie Tożsamości Firmy i wiele więcej...

xHTML / CSS / JavaScript / AJAX / XML / PHP / SQL / MySQL
Zend Framework, jQuery, Lightbox, TinyMCE
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.04.2025 - 04:11