ďťż

[JavaScript] Czy mycha znajduje się nad DIV? Jak to sprawdzić?

       

Podstrony


telcocafe

Jak sprawdzić w zdarzeniu onclick, czy kursor myszki znajduje się nad warstwą DIV o pewnym ID lub o pewnej klasie?

Funkcja onclick dotyczy całego dokumentu:
onclick=function() { ... }

Chcę osiągnąć efekt podobny jak z menu na tym forum.
Użytkownik Ferrari edytował ten post 21 marzec 2007, 17:01


Toporna metoda: globalna tablica asocjacyjna o kluczach będących nazwami DIVów, a wartościach będących typem boolean, określającym, czy myszka jest na nim, czy nie. I funkcja onmouseover dla każdego DIVa byłaby mniej-więcej taka:
myszki[this.value] = true;
Oraz dla onmouseout:
myszki[this.value] = false;

PS. Z tym menu, to chodzi Ci o coś takiego jak:
http://kurshtml.boo....ijane_menu.html
?

Kliknij na górze przycisk OPCJE, a potem gdziekolwiek poza wyświetlonym menu. O tego typu efekt mi chodzi.

Hmmm, może dam taką dwuczłonową odpowiedź...

1.
http://kurshtml.boo...._rozwijane.html
I to możesz przerobić (ale nie wiem, czy się tak da :D), żeby po kliknięciu gdzieś poza odpowiedni DIV (czyli np. body onclick="schowaj_menu();").

2.

Jak sprawdzić w zdarzeniu onclick, czy kursor myszki znajduje się nad warstwą DIV o pewnym ID lub o pewnej klasie?
if (this.className=='klasa') { }
Skoro w metodzie onlick, to znaczy, że kursor musi być nad elementem, który wywołał dla siebie onclick. Zatem przekazuje zmienną this. Czyli masz odpowiedź na swoje pytanie :P

Chyba, że jeszcze Ci o to nie chodziło :rolleyes:



Ale problem w tym, że chcę to zbadać niezależnie od tego, czy kursor znajduje się nad tym elementem.

Jest to skomplikowane, ale możliwe. Jeśli nic się wykombinuje, zastosuję metody onmouseover i onmouseout.

http://w3schools.com...rrenttarget.asp
http://w3schools.com...vent_target.asp
//ewentualnie: http://w3schools.com...vent_srcelement

Może pomoże (mam nadzieję) :)
Użytkownik pbnan edytował ten post 21 marzec 2007, 19:32
Teraz działa, ale mam kolejny problem. Co zrobić, aby TARGET dotyczyło również obiektów znajdujących się w tej warstwie?

Jeszcze jedno pytanie - jeśli wpiszę większą ilość klas w atrybucie CLASS, JS będzie wykrywał poprawnie warstwy o klasie HINT?

Przykład:<div class="hint txtm menu">...</div>

onclick=function(e) { var targ; if(!e) var e=window.event; if(e.target) targ=e.target; else if(e.srcElement) targ=e.srcElement; if(targ.nodeType==3) //Safari targ=targ.parentNode; alert(targ.id); if(targ.className.indexOf('hint')!=-1) { alert('t'); for(i=0;i<toHide.length;i++) { Hint(toHide[i],cx,cy,1) } } }

Może niepotrzebnie mordowałem się z JS jeszcze dłużej - poniższe rozwiązanie również jest dobre.
onmousedown=XY; onclick=function() { var l=toHide.length; if(l>0) { for(i=0;i<l;i++) { Hint(toHide[i],cx,cy,1) } } } //HINTY function Hint(i,l,t,u) { if(d(i).style.display!='block') { d(i).style.left=l+'px'; d(i).style.top=t+'px'; d(i).style.display='block'; if(u==1) setTimeout('toHide.push("'+i+'")',300); } else { d(i).style.display='none'; if(u==1) toHide.splice(toHide.indexOf(i),1); } }Znalezienie rozwiązania również trochę potrwało.
Użytkownik Ferrari edytował ten post 21 marzec 2007, 22:01
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.