See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 8782|Vastuse: 0

[JavaScript] Kui hiir liigub div-i sees teisele kihile, käivitab hiireväljavõte

[Kopeeri link]
Postitatud 17.12.2018 14:57:53 | | | |
Rääkides DIV elemendist, on sees IMG element ja SPAN element, ära muretse, kuidas need kaks sisemist elementi paigutatud on, see pole see teema, millest ma rääkida tahan.

Eriefektide saavutamiseks pean kasutama TD onmouseover ja onmouseout sündmusi ning kui seda testin, leian järgmise olukorra:

Kui hiir liigub DIV-i sees, käivitub onmouseover sündmus; Seejärel liigutame hiire IMG või SPAN elemendi juurde DIV-s, me kindlasti ei arva, et hiir on liikunud DIV-i välisküljele, kuid kummaline on see, et onmouseout sündmus käivitub ja onmouseover sündmus käivitub kohe.

See ei ole see, mida ma tahan, nii et kuidas ma saan "blokeerida" Javascrip{filtering}t sündmuste sekkumise, mida sisemised elemendid toovad välistele elementidele?

Siin on kaks meetodit:

1. setTimeout

Kuna pärast seda, kui hiir liigub sisemise elemendi kohal ja käivitab väliselemendi onmouseout sündmuse, käivitub ka välimise elemendi onmouseover kohe, seega peame vaid lühikest aega viivitama tegevust, mida välimise elemendi onmouseout sündmus peab täitma, ning seejärel käivitama clearTimeout meetodi onmouseover sündmuses, et vältida sisemise elemendi põhjustatud sündmuse häiret.

Palun vaadake järgmist joonist konkreetse täitmisprotsessi kohta (vertikaalne katkendjoon tähistab aega):


See on nutikas lähenemine, sest kui onmouseout käivitub, ei käivitata sisulist meetodit kohe, vaid ootab lühikest aega. Kui onmouseover-sündmus käivitub kohe sel ajal, on sisuliselt kindel, et onmouseout sündmus käivitub sisemiste elementide häire tõttu, seega kasuta clearTimeouti onmouseover-sündmuses, et takistada viivitusega meetodi käivitamist.

2. sisaldab

Tehke järgmine hinnang, kui onmouseover, ja seejärel käivita meetodi keha, kui tulemus on tõene:


Tee järgmine hinnang, kui on hiire väljas, ja seejärel käivita meetodikeha, kui tulemus on tõene:

Siin on selgitus ülaltoodud kahe koodirea tähendusest:

IE-s on kõigil HTML-elementidel contain-meetod, mis määrab, kas praegune element sisaldab kindlat elementi. Seda meetodit kasutame selleks, et määrata, kas väliselemendi sündmus käivitub sisemise elemendi poolt, ja kui sisemine element põhjustab soovimatu sündmuse, siis ignoreerime seda sündmust.

event.fromElement osutab elemendile, kust hiir lahkub, kui onmouseover ja onmouseout sündmused käivituvad; event.toElement osutab elemendile, kuhu hiir siseneb, kui onmouseover ja onmouseout sündmused käivituvad.

Seega on ülaltoodud kahe koodirea tähendus järgmine:


  • Kui onmouseover sündmus käivitub, määrab see, kas hiire poolt jäetud element on praeguse elemendi sisemine element, ja kui jah, siis ignoreerib seda sündmust;
  • Kui onmouseout sündmus käivitub, hinnake, kas hiirega sisestatud element on praeguse elemendi sisemine element, ja kui jah, siis ignoreerige seda sündmust;



Nii ei sega sisemine element välise elemendi onmouseover ja onmouseout sündmusi.

Aga probleem on jälle selles, et mitte-IE brauserid ei toeta contain-funktsiooni, kuid nüüd, kui teame contain-funktsiooni, saame lisada järgmise koodi, et lisada järgmine kood, et lisada contain-toe mitte-IE brauseritele:


Ülaltoodud meetodid ei ole Firefoxiga ühilduvad:

Oluline on jQuery:

jQueryKasuta hiirelehte hiireväljaku asemel, nii et eelpool öeldu ei juhtuks.

Samuti käivitub hiire ülemine korduvalt – kasuta hiire sisestajat.

Täiuslik lahendus~





Eelmine:jQuery loend lubab ainult ühte aktiivset kontrolli
Järgmine:Veebirakenduste raamistik Tapestry
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com