Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 8782|Odgovoriti: 0

[JavaScript] Ko se miška premakne na drugo plast znotraj divja, sproži mouseout

[Kopiraj povezavo]
Objavljeno na 17. 12. 2018 14:57:53 | | | |
Ko smo že pri DIV elementu, znotraj sta IMG in SPAN element, ne skrbite, kako sta ta dva notranja elementa razporejena, to ni točka, o kateri želim razpravljati.

Za dosego posebnih učinkov moram uporabiti TD-jeve dogodke onmouseover in onmouseout, in ko bom to testiral, bom našel naslednjo situacijo:

Ko se miška premakne znotraj DIV-a, se sproži dogodek onmouseover; Nato premaknite miško na IMG ali SPAN element znotraj DIV-a, zagotovo ne mislimo, da se je miška premaknila na zunanjo stran DIV-a, vendar je nenavadno to, da se dogodek onmouseout sproži, in dogodek onmouseover se prav tako takoj sproži.

To ni tisto, kar želim, zato kako lahko "blokiram" motnje Javascrip{filtering}t dogodkov, ki jih notranji elementi povzročajo zunanjim elementom?

Tukaj sta dve metodi:

1. setTimeOut

Ker se po tem, ko miška premakne čez notranji element in sproži dogodek onmouseout zunanjega elementa, se takoj sproži tudi onmouseover zunanjega elementa, zato moramo le za kratek čas zamakniti dejanje, ki ga mora izvesti dogodek onmouseout zunanjega elementa, nato pa izvesti metodo clearTimeOut v dogodku onmouseover, da se izognemo motnjam dogodka, ki jih povzroča notranji element.

Oglejte si naslednjo sliko za specifičen postopek izvedbe (navpična črtkasta črta predstavlja čas):


To je pameten pristop, saj ko se sproži onmouseout, se vsebinska metoda ne izvede takoj, ampak počaka kratek čas. Če se dogodek onmouseover sproži takoj v tem času, je praktično gotovo, da je dogodek onmouseout sprožen zaradi motenj notranjih elementov, zato uporabite clearTimeout v dogodku onmouseover, da preprečite izvajanje zakasnjene metode.

2. vsebuje

Naredite naslednjo presojo pri onmouseover, nato pa izvedite telo metode, ko je rezultat resničen:


Naredite naslednjo presojo, ko je onmouseout, in nato izvedite telo metode, ko je rezultat resničen:

Tukaj je razlaga pomena zgornjih dveh vrstic kode:

V IE imajo vsi HTML elementi metodo contain, ki določa, ali trenutni element vsebuje določen element. To metodo uporabljamo za ugotavljanje, ali je dogodek zunanjega elementa sprožen z notranjim elementom, in če notranji element sproži nezaželen dogodek, ta dogodek ignoriramo.

event.fromElement kaže na element, kjer miška zapusti, ko se sprožijo dogodki onmouseover in onmouseout; event.toElement kaže na element, ki ga miška vnese, ko se sprožijo dogodki onmouseover in onmouseout.

Torej pomen zgornjih dveh vrstic kode je:


  • Ko se sproži dogodek onmouseover, ugotovi, ali je element, ki ga pusti miška, notranji element trenutnega elementa, in če da, ta dogodek ignorira;
  • Ko se sproži dogodek onmouseout, presodite, ali je element, ki ga vnese miška, notranji element trenutnega elementa, in če je, ta dogodek ignorirate;



Na ta način notranji element ne moti dogodkov onmouseover in onmouseout zunanjega elementa.

A težava je spet v tem, da ne-IE brskalniki ne podpirajo funkcije contain, vendar zdaj, ko poznamo funkcijo contain, lahko dodamo naslednjo kodo, da dodamo naslednjo kodo za podporo contain brskalnikom, ki niso IE:


Zgornje metode niso združljive s Firefoxom:

Bistvo je jQuery:

jQueryUporabi mouseleave namesto mouseout, tako da se zgoraj omenjeno ne zgodi.

Poleg tega se bo miška večkrat sprožila, samo uporabi mouseenter.

Popolna rešitev~





Prejšnji:jQuery list dovoljuje le eno aktivno preverjanje
Naslednji:Ogrodje za spletne aplikacije Tapestry
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com