Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zdarzenia onmouseover/out i div w divie
Forum PHP.pl > Forum > Po stronie przeglądarki
Sebusik
Witam!

Załóżmy, że mam taki kod:
  1. <div style="width: 300px; height: 300px;" id="element">
  2. <div style="width: 200px; height: 200px;">
  3. <div style="width: 100px; height: 100px;">
  4. </div>
  5. </div>
  6. </div>


No i do diva o id "element" przypisuję zdarzenia onmouseover i onmouseover:
  1. document.getElementById('element').onmouseover = function()
  2. {
  3. //coś tam robi...
  4. }
  5.  
  6. document.getElementById('element').onmouseout = function()
  7. {
  8. //coś tam robi...
  9. }


No i po najechaniu na diva jest normalnie działa, jednak po najechaniu na diva w tym głównych divie wywoływane są na nowo zdarzenia onmouseout i onmouseover. Wiem, że można to wyłączyć poprzez zastosowanie stopPropagation(), jedak, gdy znajdujemy się w obszarze 1 diva, a w tym miejscu przy okazji są te inne divy to wywoływane jest zdarzenie onmouseout. Ja bym chciał, aby na całym elemencie działało onmouseover i onmouseout bez względu na to, czy są w nim jakieś inne divy, czy nie.

Wie ktoś, jak to obejść? smile.gif
Pozdr.
maniana
Można to rozwiązać za pomocą zdarzeń mouseenter i mouseleave.
tolomei
Ale to chyba nie w czystym JavaScripcie ?

O jQuery to ja też już myślałem.
Chyba to jedyne wyjście...
Sebusik
To, że są takie zdarzenia w JQ to ja wiem, jednak nie chcę stosować tej biblioteki. W sumie nawet spojrzałem w kod tych funkcji, jednak nic z nich nie rozumiem :E

Ale skoro zrobiło to JQuery to normalnie też się musi jakoś dać tongue.gif

Dobra panowie, napisałem funkcję, która działa tak, jak mi zależało smile.gif Oblicza położenie i wymiary diva i jeżeli kursor jest w divie to aktywuje jedną funkcję, jeżeli wyjedzie to aktywuje drugą. Nie wiem, czy komuś się przyda, ale wstawiam na wszelki wypadek: http://wklej.org/id/733429/

Wywołujemy tak:
  1. document.getElementById("jakis_div").hover(function()
  2. {
  3. alert("Jesteś w divie");
  4. }, function()
  5. {
  6. alert("Jesteś poza divem");
  7. });


Pozdrawiam serdecznie smile.gif
maniana
Zamiast obliczania pozycji kursora ja bym sprawdził w DOM czy hoverowany element nie jest dzieckiem innego. Wtedy można by podjąć decyzję czy wykonać kod czy nie.
kamil4u
Operuje się tylko na zdarzeniach. Nie chce samemu teraz pisać, ale to wydaje się solidnie zrobione: http://blog.stchur.com/2007/03/15/mouseent...on-ie-browsers/
Sebusik
Cytat(maniana @ 19.04.2012, 20:34:14 ) *
Zamiast obliczania pozycji kursora ja bym sprawdził w DOM czy hoverowany element nie jest dzieckiem innego. Wtedy można by podjąć decyzję czy wykonać kod czy nie.


No właśnie to po wjechaniu na element w elemencie to wywołuje się zdarzenie zjechania. Nawet jeżeli jakoś to obejść to nie zawsze przeglądarka wyłapuje najechanie, jeżeli powierzchnia pod spodem nie jest wystarczająca dużo, a kursorem śmiga się zbyt szybko.


Cytat(kamil4u @ 19.04.2012, 23:59:54 ) *
Operuje się tylko na zdarzeniach. Nie chce samemu teraz pisać, ale to wydaje się solidnie zrobione: http://blog.stchur.com/2007/03/15/mouseent...on-ie-browsers/


Z tego co widzę tu chodzi o to, czy dany element jest tym głównym elementem, czy jest dzieckiem. Ogarnę to trochę bardziej i napiszę co z tego wyszło, bo w sumie ten kod, co podałem wcześniej nie działa też za dobrze :E

Dobra panowie, dzięki za pomoc, już wszystko działa jak należy smile.gif
Końcowa funkcja: http://wklej.org/id/737025/

Jeszcze raz dzięki wielkie smile.gif
kamil4u
Dodam, że HTMLElement.prototype nie działa pod IE.... niestety
I jeszcze zamiast wymuszać na funkcjach użycia jako pierwszego parametru this:
Kod
activated(this);
polecam użyć apply lub apply

A tak to wygląda na szybko, że jest ok.
Sebusik
Cytat(kamil4u @ 21.04.2012, 23:33:11 ) *
Dodam, że HTMLElement.prototype nie działa pod IE.... niestety

U mnie działa smile.gif


Cytat(kamil4u @ 21.04.2012, 23:33:11 ) *
I jeszcze zamiast wymuszać na funkcjach użycia jako pierwszego parametru this:
Kod
activated(this);
polecam użyć apply lub apply


Eee... co? :E

Dobra, już wiem smile.gif Nawet nie widziałem o tym, dzięki wink.gif
kamil4u
Cytat
U mnie działa smile.gif

To zależy czy chcesz obsługiwać starsze przeglądarki IE. Nie pamiętam dokładnie( musisz sprawdzić ), ale chyba dopiero IE9 wspiera HTMLElement. IE7 na pewno nie, a IE8 właśnie nie pamiętam.
Sebusik
Cytat(kamil4u @ 22.04.2012, 13:45:57 ) *
To zależy czy chcesz obsługiwać starsze przeglądarki IE. Nie pamiętam dokładnie( musisz sprawdzić ), ale chyba dopiero IE9 wspiera HTMLElement. IE7 na pewno nie, a IE8 właśnie nie pamiętam.


Jeżeli coś działa na najnowszej wersji przeglądarki to zazwyczaj nie przejmuję się jej starszymi wersjami smile.gif
kamil4u
Cytat
Jeżeli coś działa na najnowszej wersji przeglądarki to zazwyczaj nie przejmuję się jej starszymi wersjami smile.gif

I chwała Ci za to. Niestety klienci czasami chcą i koniec.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.