Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Fier
  • Meniul contextual în Firefox. Crearea unei structuri de bază

Meniul contextual în Firefox. Crearea unei structuri de bază

Un meniu contextual personalizat este rar folosit într-o interfață de pagină web. La urma urmei, utilizatorului nu este deloc evident că pe un element este necesar să faceți clic nu cu butonul stânga, ci cu butonul drept al mouse-ului și să selectați un element din listă. În plus, nu tuturor vizitatorilor site-ului le place să folosească butonul drept al mouse-ului, iar smartphone-urile nu îl au deloc, ci doar imitație. În ciuda acestor caracteristici în HTML5, este posibil să vă creați propriile meniuri contextuale, acest lucru este implementat până acum doar în Firefox și este foarte ciudat.

Mai întâi, să vedem cum sunt create în general. diferite meniuri... Pentru aceasta, se folosește o combinație de etichete

și (exemplul 1).

Exemplu 1. Meniu contextual

HTML5 IE Cr Op Sa Fx

Meniul contextual

Atributul contextmenu ne spune că meniul nostru este contextual și, în același timp, indică eticheta

cu un identificator dat (în în acest caz Editați | ×). Până acum, niciun browser nu înțelege exemplul de mai sus, inclusiv Firefox. Pentru el, în loc de etichetă trebuie inserată o etichetă personalizată (exemplul 2).

Exemplu 2. Meniuri în Firefox

HTML5 IE Cr Op Sa Fx

Meniul contextual

Codul s-a dovedit a fi invalid, dar când dați clic pe imagine în Firefox, acesta apare meniu frumos(fig. 1).

Orez. 1. Meniu contextual

În timp ce acest meniu nu funcționează calea cea buna deci hai sa o refacem. Mai întâi, să adăugăm o pictogramă lângă elementul de meniu folosind atributul pictogramă, astfel încât meniul să arate mai frumos. Valoarea specifică calea relativă sau absolută către fișierul grafic. Apoi, trebuie să vă asigurați că atunci când faceți clic pe un element de meniu, are loc o acțiune. Pentru a face acest lucru, vom folosi evenimentul onclick și cu ajutorul lui vom suna funcția dorită... Exemplul 3 arată creația meniul contextual pentru text, dacă selectați „Editare” în el, atunci textul poate fi editat. De fapt, se folosește un câmp de text ascuns, care devine vizibil atunci când este apelată funcția de editare (), în timp ce textul în sine este ascuns pe durata editării. După apăsarea Enter, textul din formular este inserat la loc paragraf text, dând impresia că el a fost cel care am condus. Formularul, după finalizarea editării, se ascunde din nou.

Exemplul 3. Editarea textului

HTML5 IE Cr Op Sa Fx

Meniul contextual

Text mostră

Noul meniu este prezentat în Fig. 2.

Orez. 2. Meniu cu pictogramă

După cum puteți vedea din exemplu, crearea unui meniu contextual nu este diferită de crearea altor elemente interactive. Când facem clic pe un element de meniu, funcția noastră este apelată utilizând handlerul onclick, iar apoi această funcție va face ceea ce vrem. Firefox 8 a fost primul browser care a suportat meniuri contextuale HTML5, dar este surprinzător de ce Dezvoltatorii Firefoxși-au introdus propria etichetă personalizată pentru meniu ... Există mai multe scenarii posibile pentru desfășurarea evenimentelor:

  • etichetă va fi adăugat la specificația HTML5;
  • această etichetă va deveni învechită și nu va fi acceptată în versiunile viitoare de Firefox;

Rămâne doar să așteptăm răspunsul altor browsere, în care eticheta vor fi în sfârșit implementate, precum și diferite meniuri bazate pe acesta.

Instrucțiuni

Dacă browserul nu se afișează meniul, și vedeți pe ecran doar pagina de Internet selectată, ceea ce înseamnă că browserul dvs. funcționează modul ecran întreg... Există mai multe moduri de a ieși din ea.

Dacă în meniul derulant meniul nu există nicio comandă dată, utilizați combinația de taste Alt și Enter, care vă permite să mergeți încoace și încolo în multe programe. De asemenea, în diverse browsere schimbarea modului se realizează folosind tasta F11.

Când panoul încetează să se mai ascundă în spatele marginii de sus a ecranului, mutați cursorul pe el și faceți clic dreapta. Setați în context meniul marker de lângă elementul „Panel meniul„Sau” String meniul»(Formularea depinde de ce browser este instalat).

După această acțiune fereastra browserului ar trebui să afișeze standardul pentru meniul puncte. Elementul „Fișier” vă permite să gestionați fereastra programului, să deschideți și să închideți ferestre și file noi, să trimiteți pagini web pentru imprimare.

Elementul „Editare” conține comenzile standard „Copy”, „Cut”, „Paste”, „Find” și nu diferă mult de paragraf similarîn orice alt program. Pe aspect fereastra browserului corespunde articolului „Vizualizare”.

Accesul la resursele salvate de utilizator se realizează folosind elementul „Favorite” sau „Marcaje”, meniul„Serviciul” sau „Instrumente” vă permite să personalizați browserul în conformitate cu nevoile dumneavoastră.

Tot pe panou meniul pot exista și alte instrumente, cum ar fi bara de stare, bara de favorite, bara de navigare. Pentru a le personaliza afișarea, mutați și cursorul pe panou, faceți clic dreapta pe el și selectați în context meniul articolele dorite, marcându-le cu un marker.

Surse:

  • unde este browserul

Numărul de trupe care cântă muzică din toate direcțiile de la jazz la rap-core poate fi evaluat vizitând un club. Până la două duzini ies pe scenă pe seară. Pentru a ieși în evidență pe fondul acestei mulțimi, nu este suficient să cânți muzică bună - trebuie să investești bani în promovarea ta. Dacă echipa nu este pregătită să se despartă de o sumă mare, trebuie să caute ajutor pe partea laterală.

Instrucțiuni

Sponsorii tind să se asocieze cu grupuri care au deja succes. Prin urmare, înaintea ta, câștigă un public destul de mare și stabil. Pentru aceasta, pe lângă muzică, ai grijă de scenografia, efectele speciale, interacțiunea muzicienilor pe scenă, fă fiecare spectacol puțin nou.

Enumerați organizațiile situate în zona sau zona dvs. ale căror activități sunt direct sau indirect legate de muzică. Într-o altă listă, enumerați restul organizațiilor care nu au nicio legătură cu dvs. Ajutorul poate veni din orice direcție, dar începeți cu prima listă.

Studiu opțiuni posibile... Înainte de a contacta orice organizație, verificați dacă aceasta este sponsorizată și în ce zonă; dacă alți muzicieni au contactat-o ​​și dacă a fost refuzată. Chiar dacă ești tu însuți, studiază-i afacerea înainte de a lua orice decizie.

Pentru o vreme, vei deveni chipul organizației. Prin urmare, atunci când vă luați în considerare candidatura, sponsorul va fi foarte pretențios în privința aspectului dvs. Dacă nu sunteți pregătit să vă schimbați imaginea de dragul conformității, nu contați pe consimțământ. De regulă, un potențial sponsor nu insistă asupra unei astfel de schimbări, ci pur și simplu refuză. Daca nu tii cont de criteriul aspectului, atunci vei pierde timp si, eventual, sansa de a te intalni cu un sponsor adevarat.

Nu negociați nimic. Toate condițiile trebuie specificate în contract. Discutați fiecare punct cu un avocat. Dacă ceva nu ți se potrivește, nu te sfiește. Este mai bine să afli acum toate punctele controversate decât să te muști din coate mai târziu din cauza propriei neatenții.

Videoclipuri similare

Revista Favorites este necesară pentru a nu căuta acele resurse la care se referă adesea utilizatorul Munca zilnica... Oferă acces rapid la materialele necesare. Există mai mulți pași pe care trebuie să-i faceți pentru a vă găsi Favoritele.

Instrucțiuni

„Favorite” există nu numai în browsere, ci și furnizate în meniul oricărui folder stocat pe computer. Deoarece bara de meniu este întotdeauna prezentă în foldere, nu trebuie să configurați nimic în continuare. Deschideți folderul, selectați elementul „Favorite” din meniu, făcând clic pe acesta cu butonul stâng al mouse-ului, se va deschide meniul contextual. Pentru a plasa orice folder în listă, selectați comanda „Adăugați la favorite” făcând clic pe el cu butonul stâng al mouse-ului. Dosarul selectat va apărea în meniu.

Când lucrați cu browsere de internet, poate fi necesar să personalizați afișarea barei de meniu sau butonul dedicat, cu care vei avea acces la revista „Favorite”. Pentru a face acest lucru, în Internet Explorer, faceți clic dreapta pe panou, în meniul contextual, selectați unul dintre Optiuni Disponibile... Plasați markerul vizavi de elementul „Bara de meniu” - în acest fel puteți deschide „Preferate” în același mod ca cel descris la primul pas.

Dacă doriți ca marcajele să fie afișate în panoul browserului, selectați elementul „Bara de favorite” din meniul contextual, marcându-l și cu un marcator. O altă bară de instrumente este adăugată în fereastra browserului. Dacă credeți că ocupă prea mult spațiu, puteți accesa rapid resursele potrivite si in alt fel. Faceți clic pe pictograma stea din bara de instrumente, jurnalul se va extinde. Selectați fila „Preferate” din ea pentru a vizualiza lista adreselor site-urilor stocate în istoric.

În browser Mozilla Firefox jurnalul cu lista de resurse se numește „Marcaje”. Îl puteți apela prin articolul cu același nume în linia de sus meniu prin personalizarea afișajului Favoritelor în bara de instrumente sau prin deschiderea revistei Bibliotecă. Acest jurnal poate fi apelat în mai multe moduri: selectați „Marcaje” în bara de meniu și comanda „Afișați toate marcajele” sau apăsați combinația Tastele Ctrl, Shift și B. Jurnalul se va deschide la fereastra separata.

O fereastră de browser este o formă de interfață grafică utilizată atunci când un utilizator folosește Internetul. În același timp, fereastra browserului a primit acest nume datorită faptului că, ca o fereastră obișnuită, are o formă dreptunghiulară.

Browser

Cuvântul „browser” însuși a venit în rusă din engleză, în care verbul „browse” înseamnă „a vizualiza”. Astfel, astăzi în domeniul tehnologiilor Internet cuvântul „browser” este folosit pentru a însemna program special, care este conceput pentru a vizualiza informații pe Internet.

Astăzi acest segment de piață este în continuă expansiune, astfel încât utilizatorii au posibilitatea de a alege dintre mai multe sau mai puțin browsere populareîn funcție de funcțiile și capacitățile disponibile în fiecare dintre programe, acestea par a fi mai convenabile. Așadar, unul dintre cele mai utilizate browsere de multă vreme este „Internet Explorer”, care pentru o perioadă lungă de timp a fost lider în popularitate în rândul utilizatorilor, dar alții își revendică poziția astăzi. programe convenabile, de exemplu „Mozilla Firefox”, „Opera”, „ Google Chrome" si altii.

Ferestrele browserului

De regulă, alegerea acestui sau aceluia browser se bazează pe funcțiile pe care le oferă utilizatorului, precum și pe confortul interfeței sale, adică pe organizarea grafică a paginii, pt. o anumită persoană cine plănuiește să-l instaleze. Conform acestor parametri, browserele enumerate au diferențe destul de vizibile, cu toate acestea, există o serie de parametri de interfață care sunt la fel pentru toate astfel de programe.

Unul dintre acești parametri este forma de furnizare a informațiilor de pe pagina de Internet. În toate browserele existente astăzi, acesta este prezentat sub forma unei așa-numite ferestre - un câmp dreptunghiular în care sunt afișate text, imagini, videoclipuri sau alte informații. Fereastra browserului poate fi extinsă la Ecran complet, adică umpleți întreg spațiul monitorului cu acesta sau utilizați forma condensată a reprezentării ferestrei făcând clic pe simbolul sub forma a două pătrate din dreapta colțul de sus ecran. În plus, o fereastră de care nu mai aveți nevoie poate fi închisă făcând clic pe simbolul în formă de cruce, sau minimizată, adică eliminată temporar din câmpul vizual făcând clic pe simbolul în formă de liniuță.

Fiecare fereastră de browser poate deschide una sau mai multe file suplimentare pentru a accesa mai multe pagini de internet în același timp. Acest lucru se poate face prin mutarea cursorului mouse-ului la partea de sus ecran. În unele browsere această caracteristică este afișată ca un simbol plus, în timp ce în altele este afișată ca un mic câmp liber lângă numele unui site deja deschis. A inchide filă separată, trebuie să faceți clic și pe simbolul crucii - cel din partea dreaptă a filei.

Elementele principale ale ferestrei din orice browser sunt bara de adrese și câmpul principal pentru afișarea informațiilor. Bara de adresa este afișat în partea de sus a ferestrei browserului. De obicei, începe cu caracterele „www” sau „http: //” și este un cod alfabetic care vă va duce la pagina dorită. În prezent, adresele paginilor în Internet vorbitor de limba rusă pot fi tastate atât în ​​fonturi latine cât și chirilice. În câmpul principal, puteți vedea cel mai mult texte diferite, poze, videoclipuri și alte informații, a căror compoziție depinde de conținutul site-ului pe care îl vizualizați.

Surse:

  • Ce este un browser web, o fereastră de browser și o bară de adrese?

În acest tutorial, vom arunca o privire mai atentă asupra funcțiilor într-un mod foarte cheie utilă care este disponibil pe orice tastatură. Această tastă se numește „Tasta Meniu contextual”. Este situat în partea dreaptă jos a tastaturii între tastele ALTși CTRL



Apăsând această tastă se afișează MENIU CONTEXT, exact la fel ca și când ați apăsa butonul DREAPTA al mouse-ului.

Trucul acestui buton este că meniul apelat atunci când îl apăsați va afișa funcții (articole de meniu) care pot fi aplicate în programul curent, v fereastra activă, pe desktop, etc. Acestea. acest meniu se adaptează la procesul în care lucrați direct și este foarte convenabil.

Acum să aruncăm o privire mai atentă la principalele opțiuni de afișare a meniului contextual în diferite medii și la funcțiile care pot fi efectuate folosind acest meniu.



Când apăsați butonul DREAPTA al mouse-ului sau tasta „Meniu contextual” de pe desktop desktop Windows 7 apare un meniu după cum urmează:



1. În partea de sus a meniului - setați parametrii plăcii video.
2. Vizualizare - personalizați afișarea pictogramelor de pe desktop




3. Sortare - setarea sortării prin afișarea pictogramelor pe desktop




4. Actualizează - Actualizează afișarea conținutului de pe desktop.
5. Lipiți - dacă ați copiat ceva, îl puteți lipi pe Desktop.
6. Creați. Aici puteți crea pe Desktop: folder, comandă rapidă, document text, arhivă, documente MS Office - Word, Excel, PowerPoint etc. (dacă este instalat)




7. Rezoluția ecranului. Aici puteți seta setările necesare pentru ecran: selectați un ecran (pot fi mai multe dintre ele), aflați sau setați rezoluția ecranului, determinați orientarea ecranului și, de asemenea, configurați alți parametri pentru lucrul cu ecranul, de exemplu, conectați un proiector.



8. Gadget-uri - selecție și instalare gadget-uri Windows 7. Windows XP nu are această caracteristică.




9. Personalizare. Aici puteți personaliza aspectul desktopului, puteți schimba fundalul, ecranul de splash, sunete, tema, culoarea ferestrei etc.





Când apăsați butonul DREAPTA al mouse-ului sau tasta „Meniu contextual” pe un fișier din Explorer sau oricare altul manager de fișiere meniul se adaptează și la fișier de un anumit tip... De exemplu, am făcut clic pe un fișier video. S-a deschis următorul meniu:




În acest caz, meniul oferă funcții care corespund exact fișierului video și anume: redare, adăugare în lista playerului care este selectat implicit pentru de acest tip fişier. Și o serie de funcții standard: deschidere cu, adăugare la arhivă (dacă arhivatorul este instalat), trimitere, tăiere, copiere, ștergere, redenumire și proprietăți ale fișierului.

Dacă faceți clic pe butonul DREAPTA al mouse-ului sau pe tasta „Meniu contextual”. fisier grafic, apoi se va deschide un meniu, care va corespunde tipului de fișier grafic:




Aici puteți deschide, edita sau imprima imediat fișierul selectat în programul de imagine implicit. În cazul meu, acesta este programul ACDSee.

Aici puteți face imediat fișierul selectat imagine de fundal pentru desktop, este foarte convenabil atunci când alegeți lista mare... Și apoi există din nou funcții standard pentru lucrul cu fișiere.

Mă voi opri mai detaliat asupra articolelor „Deschide cu” și „Trimite”.

De ce este utilă funcția „Deschide cu”.




Aici puteți selecta sau aloca pe oricare să lucreze cu fișierul selectat programul instalat care înțelege formatul de fișier selectat. În acest caz, am dat clic pe fișierul video și mai multe programe pot funcționa cu acest format pe computerul meu: Light Allow, WinAmp și bineînțeles Windows Media Jucător.

Dacă programul necesar nu este în listă, dar știți sigur că este instalat, selectați elementul de meniu „Selectare program”. Windows vă va solicita să selectați programe dintr-o listă de programe recomandate sau alte programe. În Windows XP, aspectul acestei ferestre este ușor diferit, dar sensul este același.




Dacă doriți ca formatul de fișier selectat să fie deschis întotdeauna de programul pe care îl selectați, atunci bifați caseta „Utilizați programul selectat pentru toate fișierele de acest tip”.

Dacă programul solicitat nu se află în lista de programe recomandate, sau în altele, dar știți sigur că programul este instalat, atunci faceți clic pe butonul „Răsfoiți...” și selectați-l din folderul în care este instalat programul.

De ce este utilă funcția „Trimite”?
Cu această funcție, puteți trimite (transfera, transfera) fișierul selectat prin BlueTooth (bluetooth), Skype, mail, pe Desktop, în arhivă, pentru a scrie pe un disc CD/DVD, pe o unitate flash USB, astfel încât să vorbesc etc.






Și aici, meniul se adaptează diferite situatii, în funcție de locul în care dați clic pe pagina web. De exemplu, dacă faceți clic pe link, se va deschide următorul meniu:




Folosind acest meniu, puteți deschide conținutul linkului într-o filă nouă sau într-o fereastră nouă, adăugați linkul la marcaje, trimiteți linkul, copiați linkul, dacă linkul este un fișier, apoi îl puteți salva folosind „ Salvează ținta ca ...". Dacă ai instalat programe pentru descărcare, poți descărca conținutul linkului cu ajutorul acestora.

Dacă faceți clic pe butonul DREAPTA al mouse-ului sau pe tasta „Meniu contextual” pe imaginea de pe pagina web, atunci se va deschide un meniu cu alte funcții:




Aici puteți copia imaginea în clipboard și inserați, de exemplu, în document Word, puteți salva imaginea pe computer folosind „Salvare imagine ca...”, trimiteți imaginea prin poștă, creați imaginea selectată model de fundal desktop, aflați informații despre imagine (tip, dimensiune, nume fișier) etc.

Lasă-mă să rezum. În această lecție, am examinat cele mai populare opțiuni pentru utilizarea meniului contextual, care este invocat făcând clic pe butonul DREAPTA al mouse-ului sau apăsând tasta „Meniu contextual” de pe tastatură.
Și anume:
1. Apăsând butonul DREAPTA al mouse-ului sau tasta „Meniu contextual” de pe desktopul Windows

2. Apăsând butonul DREAPTA al mouse-ului sau tasta „Meniu contextual” pe un fișier sau folder din Explorer sau orice alt manager de fișiere.

3. Apăsând butonul DREAPTA al mouse-ului sau tasta „Meniu contextual” în orice browser de Internet.

Esenta această lecție astfel încât să înveți cum să folosești funcțiile utile ale mediului activ specific al computerului tău. În orice mediu, făcând clic pe butonul DREAPTA al mouse-ului sau făcând clic pe butonul „Meniu contextual”, veți primi o listă funcții utile disponibil in acest moment timp relativ la obiectul selectat.

  • Traducere
  • Tutorial

Aplicațiile web de astăzi devin un nou pas în dezvoltarea web-ului. Acestea sunt departe de site-urile de informare obișnuite. Gmail și Dropbox sunt exemple de aplicații web avansate. Pe măsură ce funcționalitatea, disponibilitatea și utilitatea aplicațiilor web crește, la fel crește și nevoia de a crește eficiența utilizării acestora. Acest tutorial va acoperi crearea unui lucru atât de util precum propriul meniu contextual și, în special:

  1. Să ne dăm seama ce este un meniu contextual și de ce aveți nevoie de el.
  2. Să implementăm meniul nostru contextual folosind JS și CSS.
  3. Să atingem deficiențele și limitările abordării utilizate pentru a ști ce probleme ne pot avertiza atunci când introducem toate acestea în producție.

Ce este un meniu contextual?

Potrivit Wikipedia, un meniu contextual este un meniu care apare atunci când un utilizator interacționează interfata grafica(când faceți clic pe butonul din dreapta al mouse-ului). Meniul contextual conține un set limitat acțiuni posibile care sunt de obicei asociate cu obiectul selectat.

Pe computer, făcând clic dreapta pe desktop va apărea un meniu contextual sistem de operare... De aici probabil că puteți crea dosar nou, obțineți niște informații și faceți altceva. Meniul contextual din browser permite, de exemplu, să obțineți informații despre pagină, să vizualizați sursele acesteia, să salvați o imagine, să deschideți un link într-o filă nouă, să lucrați cu clipboard-ul și așa mai departe. Mai mult, setul Actiuni valabile depinde de unde ai dat clic, adică de context. Acesta este comportamentul implicit stabilit de dezvoltatorii browserului [ Și extensii ale acestuia].

Aplicațiile web încep încet să înlocuiască meniurile contextuale standard cu propriile meniuri. Gmail și Dropbox sunt exemple excelente. Singura întrebare este cum să vă creați propriul meniu contextual? În browser, clic dreapta declanșează evenimentul meniului contextual. Va trebui să suprascriem comportamentul implicit și să îl facem astfel încât în ​​loc de meniu standard am dedus pe ale noastre. Nu este atât de greu, dar o vom înțelege pas cu pas, așa că va ieși destul de voluminos. Pentru început, să creăm structura de bază a aplicației, astfel încât exemplul dezvoltat să nu fie complet în afara realității.

Lista de sarcini

Să ne imaginăm că creăm o aplicație care ne permite să menținem o listă de activități. Înțeleg că probabil că te-ai săturat deja incredibil de toate aceste liste de lucruri de făcut, dar lasă-l să fie. Pagina aplicației conține o listă de sarcini în așteptare. Un set tipic de acțiuni CRUD este disponibil pentru fiecare sarcină: obțineți informații despre sarcină, adăugați una nouă, editați, ștergeți.

Un exemplu de rezultat este disponibil pe CodePen. Puteți căuta imediat acolo dacă vă este prea lene să citiți sau doriți să vă asigurați că sunteți cu adevărat interesat de lectură ulterioară. Între timp, să trecem la dezvoltare pas cu pas conceput. Voi folosi câteva trucuri CSS moderne și voi crea o listă de sarcini de bază bazată pe atributele datelor. De asemenea, voi folosi resetarea stilului lui Eric Meyer și voi reseta proprietatea de dimensionare a casetei pentru toate elementele din caseta de margine:
*, * :: înainte, * :: după (dimensiunea cutiei: cutie-chenar;)
Nu voi folosi prefixe CSS, dar demonstrația CodePen include un prefixer automat.

Crearea unei structuri de bază

Să deschidem documentul nostru HTML, să adăugăm un antet, o parte de conținut cu o listă de sarcini și un subsol. De asemenea, voi modifica Font Awesome și fontul Roboto pentru a le face să arate puțin mai bine. Fiecare sarcină trebuie să conțină un atribut data-id, care în realitate ar fi preluat din baza de date. De asemenea, fiecare sarcină va conține o listă de acțiuni. Iată părțile importante ale marcajului:
  • Du-te la băcănie

Dacă utilizați CodePen, puteți activa prefixul automat și resetarea CSS în setări. În caz contrar, va trebui să faci totul manual, dacă nu ai automatizat încă acest proces. Amintiți-vă că scopul nostru este să creăm un meniu contextual, astfel încât nicio gestionare a acțiunilor nu va fi implementată. Acum să mai adăugăm ceva CSS:
/ * sarcini * / .tasks (stil listă: niciuna; margine: 0; padding: 0;) .task (afișare: flex; justificare-conținut: spațiu între; padding: 12px 0; chenar-bottom: solid 1px # dfdfdf;) .sarcină: ultimul-copil (border-bottom: niciunul;)
Un set complet de stiluri (și orice altceva) este prezentat pe CodePen. Și aici vor fi cele mai importante părți ale codului, marcajului și aspectului. Dar să ne apropiem în sfârșit de meniul nostru contextual.

Schițarea meniului nostru contextual - marcare

Miezul meniului nostru este același ca orice alt meniu - o listă neordonată imbricată într-o etichetă de navigare. Fiecare acțiune va fi prezentată ca un articol de listă cu un link. Fiecare link este responsabil pentru o anumită acțiune. După cum am menționat mai devreme, avem nevoie de trei acțiuni în meniul contextual:
  1. Vizualizați sarcina.
  2. Editarea unei sarcini.
  3. Ștergerea unei sarcini.
Introducerea marcajului:

Dacă nu aveți idee unde să puneți acest marcaj, puneți-l înainte de închidere eticheta corporală... Înainte de a trece la CSS, să clarificăm câteva puncte:
  1. Dorim ca meniul contextual să apară acolo unde s-a făcut clic dreapta, adică are nevoie de poziționare absolută. Prin urmare, nu ar trebui să-i puneți marcajul într-un container cu poziționare relativă.
  2. Vom avea nevoie de unele variabile sau atribute pentru a putea determina cărei sarcini îi aparține acțiunea selectată.
Acum pentru stiluri.

Îngrijirea meniului nostru - CSS

Necesitatea a fost deja menționată poziționare absolută meniul dezvoltat. De asemenea, să setăm proprietatea z-index la 10. Rețineți că aplicația dvs. poate necesita o valoare diferită. Acestea nu sunt toate stilurile posibile, alte frumuseți sunt afișate în demo, dar depind deja de nevoile tale și nu sunt necesare. Înainte de a trece la JS, să facem meniul invizibil în mod implicit și să adăugăm clasa suplimentara pentru a-l afișa.
.menu-context (afișare: niciunul; poziție: absolut; index-z: 10;) .meniu-contextual - activ (afișare: bloc;)

Extinderea meniului nostru contextual - JavaScript

Să începem prin a vedea cum să înregistrăm evenimentul din meniu contextual. Să deschidem funcția de auto-execuție și să surprindem evenimentul pe întreg documentul. De asemenea, vom înregistra evenimentul pe consolă pentru a obține câteva informații:
(funcția () ("utilizați strict"; document.addEventListener ("meniu contextual", funcția (e) (console.log (e);));)) ();
Dacă deschideți consola și faceți clic dreapta undeva, veți vedea că evenimentul este de fapt afișat acolo. Există o mulțime de informații aici pe care le putem folosi. Suntem interesați în special de coordonate. Înainte de a anula comportamentul implicit, să ținem cont de faptul că acest lucru nu trebuie făcut pe întregul document, ci doar pe elementele din lista de activități. Având în vedere acest lucru, va trebui să efectuați următorii pași:
  1. Ar trebui să parcurgeți toate elementele din lista de activități și să adăugați un handler de evenimente din meniu contextual pentru fiecare dintre ele.
  2. Să anulăm comportamentul implicit pentru fiecare handler.
  3. Vom înregistra evenimentul și elementul căruia îi aparține consolei.
În general, facem ceva de genul:
(funcție () ("utilizați strict"; var taskItems = document.querySelectorAll (". task"); pentru (var i = 0, len = taskItems.length; i< len; i++) { var taskItem = taskItems[i]; contextMenuListener(taskItem); } function contextMenuListener(el) { el.addEventListener("contextmenu", function(e) { console.log(e, el); }); } })();
Dacă vă uitați în consolă, puteți vedea că un eveniment unic este declanșat de fiecare dată când faceți clic pe un element din lista de activități. Acum, pe lângă anularea comportamentului implicit, vom implementa afișarea meniului contextual prin adăugarea unei clase helper la acesta.

Dar mai întâi, să adăugăm un ID în meniu pentru a facilita accesul prin JS. De asemenea, adăugați variabilă de stare meniulState și și variabila cu clasa activă. Avem trei variabile:
var meniu = document.querySelector ("# meniu contextual"); var menuState = 0; var active = "meniu-contextual - activ";
Să mergem mai departe. Să revizuim funcția contextMenuListener și să adăugăm un toggleMenuOn care afișează meniul:
funcția contextMenuListener (el) (el.addEventListener ("menu context", funcția (e) (e.preventDefault (); toggleMenuOn ();));) funcția toggleMenuOn () (dacă (menuState! == 1) (menuState = 1) ; menu.classList.add (activ);))
În acest moment, puteți apela deja meniul nostru contextual cu butonul din dreapta al mouse-ului. Dar nu se poate spune că funcționează corect. În primul rând, nu este deloc acolo unde ne-am dori să fie. Este nevoie de puțină matematică pentru a rezolva problema. În al doilea rând, nu este încă posibilă închiderea acestui meniu. Luând în considerare modul în care funcționează meniurile contextuale obișnuite, am dori ca implementarea noastră să se închidă atunci când facem clic pe un non-meniu și când apăsăm Escape. În plus, când faceți clic dreapta în afara meniului nostru, acesta ar trebui să se închidă și, în schimb, este necesar să deschideți meniul implicit. Să încercăm să rezolvăm toate acestea.

Refactorizarea codului nostru

Evident, trei evenimente principale vor fi responsabile pentru toate acțiunile:
  1. contextmenu - Verificarea stării și extinderea meniului contextual.
  2. faceți clic - Ascundeți meniul.
  3. keyup - Gestionați apăsările de la taste. În acest ghid, doar ESC este de interes.
De asemenea, vom avea nevoie de câteva funcții de ajutor, așa că vom adăuga o secțiune pentru ele în cod. Astfel, avem:

Mult cod

(funcție () ("utilizați strict"; ///////////////////////////////////////////////////////////// ////////////////////////////////// // // FUNCŢII AJUTOR // FUNCŢII AUXILIARE // / //// ////////////////////////////////////////////////////////////////////////////// ///////////////////// / ** * Unele funcții de ajutor aici. * Aici sunt funcțiile de ajutor în sine. * / ////// //// ////////////////////////////////////////////////////////////////////////// ////////////////// // // COREFUNCȚII // FUNCȚII DE PRINCIPALA // ///////////////// //// ////////////////// /////////////////////////////////////////////////// /////// / ** * Variabile. * Variabile. * / Var taskItemClassName = "sarcină"; var meniu = document.querySelector ("# meniu contextual"); var menuState = 0; var activeClassName = "context -menu - activ"; / ** * Inițializați codul aplicației noastre. * Inițializați codul aplicației noastre. * / function init () (contextListener (); clickListener (); keyupListener ();) / * * * Ascultă meniul context evenimente. * Gestionați evenimentele din meniul contextual. * / Distracție ction contextListener () () / ** * Ascultă evenimentele de clic. * Tratament faceți clic pe evenimente... * / funcția clickListener () () / ** * Ascultă evenimentele de tastare. * Gestionarea evenimentului keyup. * / function keyupListener () () / ** * Activează meniul contextual personalizat. * Afișează meniul contextual. * / function toggleMenuOn () (dacă (menuState! == 1) (menuState = 1; menu.classList.add (activeClassName);)) / ** * Rulați aplicația. * Lansarea aplicației. * / init (); )) ();


Acum nu repetăm ​​elementele listei. În schimb, ne vom ocupa de evenimentul meniului contextual pe tot parcursul documentului, verificând dacă are legătură cu una dintre sarcini. Prin urmare, a fost introdusă variabila taskItemClassName. Vom face asta folosind funcția de ajutor clickInsideElement, care ia doi parametri:
  1. Evenimentul în sine trebuie verificat.
  2. Numele clasei de comparat. Dacă evenimentul a avut loc în interiorul unui element care are clasa specificată sau părintele acestui element are o astfel de clasă, atunci acest element trebuie returnat.
Iată prima funcție de ajutor:
funcția clickInsideElement (e, className) (var el = e.srcElement || e.target; if (el.classList.contains (className)) (return el;) else (while (el = el.parentNode) (dacă (el) .classList && el.classList.contains (className)) (return el;))) return false;)
Să revenim și să edităm contextListener:
funcția contextListener () (document.addEventListener („contextmeniu”, funcția (e)) (dacă (clickInsideElement (e, taskItemClassName)) (e.preventDefault (); toggleMenuOn ();)));)
Cu o funcție de ajutor care face o parte din munca murdară pentru noi și prind evenimentul meniului contextual pe întregul document, acum putem închide meniul când facem clic în afara acestuia. Pentru a face acest lucru, adăugați funcția toggleMenuOff și editați contextListener:
funcția contextListener () (document.addEventListener („contextmeniu”, funcția (e)) (dacă (clickInsideElement (e, taskItemClassName)) (e.preventDefault (); toggleMenuOn ();) else (toggleMenuOff ();)));) funcția toggleMenuOff () (dacă (menuState! == 0) (menuState = 0; menu.classList.remove (activeClassName);))
Acum faceți clic dreapta pe elementul din listă. Și apoi - în altă parte în document. Voila! Meniul nostru s-a închis și s-a deschis meniul standard. Apoi vom face ceva similar pentru evenimentul de clic, astfel încât să nu fie închis de un singur buton din dreapta:
funcția clickListener () (document.addEventListener ("clic", funcția (e) (buton var = e.which || e.button; if (button === 1) (toggleMenuOff ();)));)
Această bucată de cod este ușor diferită de cea anterioară, deoarece Firefox. După butonul corect mouse-ul este apăsat, evenimentul clic este declanșat în Firefox, așa că aici trebuie să ne asigurăm suplimentar că a existat într-adevăr un clic stânga. Acum meniul nu clipește când faceți clic dreapta. Să adăugăm un handler similar pentru clic. Tastele ESC:
funcția keyupListener () (window.onkeyup = funcția (e) (dacă (e.keyCode === 27) (toggleMenuOff ();)))
Avem un meniu care se deschide și se închide conform intenției, interacționând cu utilizatorul într-un mod natural. Să poziționăm în sfârșit meniul și să încercăm să gestionăm evenimentele din el.

Poziționarea meniului nostru contextual

Având în vedere HTML și CSS actual, meniul nostru este afișat în partea de jos a ecranului. Dar am dori să apară acolo unde a avut loc clicul. Să corectăm această omisiune enervantă. Mai întâi, să adăugăm o altă funcție de ajutor care obține coordonatele exacte ale clicului. Să-l numim getPosition și să încercăm să-l facem să se ocupe de diverse neplăceri ale browserului:
funcția getPosition (e) (var posx = 0; var posy = 0; if (! e) var e = window.event; if (e.pageX || e.pageY) (posx = e.pageX; posy = e. pageY;) else if (e.clientX || e.clientY) (posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft; posy = e.clientY + document.body.scrollTop + document.documentElement. scrollTop;) return (x: posx, y: posy))
Primul nostru pas în poziționarea meniului este pregătirea a trei variabile. Să le adăugăm la blocul de cod corespunzător:
var menuPosition; var menuPositionX; var menuPositionY;
Să creăm o funcție positionMenu care ia un singur argument, un eveniment. Deocamdată, lăsați-l să imprime coordonatele meniului pe consolă:
funcția positionMenu (e) (menuPosition = getPosition (e); console.log (menuPosition);)
Să edităm contextListener pentru a începe procesul de poziționare:
funcția contextListener () (document.addEventListener ("contextmenu", funcția (e)) (dacă (clickInsideElement (e, taskItemClassName)) (e.preventDefault (); toggleMenuOn (); positionMenu (e);) else (toggleMenuOff (); )));)
Reveniți la meniul contextual și uitați-vă la consolă. Asigurați-vă că poziția este efectiv disponibilă și înregistrată. Putem folosi stiluri inline pentru a seta proprietățile de sus și din stânga prin JS. Asta e o noua versiune meniu poziție:
funcția positionMenu (e) (menuPosition = getPosition (e); menuPositionX = menuPosition.x + "px"; menuPositionY = menuPosition.y + "px"; menu.style.left = menuPositionX; menu.style.top = menuPositionY;)
Faceți clic peste tot acum. Meniul apare peste tot! Este minunat, dar există câteva lucruri care trebuie abordate:
  1. Ce se întâmplă dacă utilizatorul face clic aproape de marginea dreaptă a ferestrei? Meniul contextual va depăși.
  2. Ce se întâmplă dacă utilizatorul redimensionează fereastra în timp ce meniul contextual este deschis? Aceeași problemă apare. Dropbox rezolvă această problemă prin ascunderea x-overflow: ascuns).
Să rezolvăm prima problemă. Să folosim JS pentru a afla lățimea și înălțimea meniului nostru și să verificăm dacă meniul se potrivește complet. În caz contrar, mișcă-l puțin. Este nevoie de puțină matematică și gândire, dar o vom păstra simplă și directă. Mai întâi, să verificăm lățimea și înălțimea ferestrei. Apoi găsim lățimea și înălțimea meniului. Și apoi ne vom asigura că diferența dintre coordonatele clicului și lățimea ferestrei indentate este mai mare decât lățimea meniului. Și vom face același lucru pentru înălțime. Dacă meniul nu se potrivește pe ecran, vom corecta coordonatele acestuia. Să începem prin a adăuga două variabile:
var menuWidth; var menuHeight;
După cum vă amintiți, meniul nostru este ascuns în mod implicit, așa că nu puteți doar să luați și să calculați dimensiunile acestuia. În cazul nostru, meniul este static, dar pentru aplicație reală conținutul acestuia se poate modifica în funcție de context, așa că este mai bine să calculați lățimea și înălțimea în momentul deschiderii. Să obținem valorile necesare în funcția positionMenu:
menuWidth = menu.offsetWidth; menuHeight = menu.offsetHeight;
Să introducem încă două variabile, dar de data aceasta pentru dimensiunea ferestrei:
var windowWidth; var windowHeight;
Să le calculăm valorile într-un mod similar:
windowWidth = window.innerWidth; windowHeight = window.innerHeight;
În cele din urmă, să presupunem că vrem să afișăm meniul la cel puțin 4 pixeli de marginea ferestrei. Puteți compara valorile, așa cum am spus mai sus, și puteți ajusta poziția cam așa:
var clickCoords; var clickCoordsX; var clickCoordsY; // a actualizat funcția positionMenu positionMenu (e) (clickCoords = getPosition (e); clickCoordsX = clickCoords.x; clickCoordsY = clickCoords.y; menuWidth = menu.offsetWidth + 4; menuHeight = menu.offsetHeight + 4; windowWidth = fereastra. innerWidth; windowHeight = window.innerHeight; if ((windowWidth - clickCoordsX)< menuWidth) { menu.style.left = windowWidth - menuWidth + "px"; } else { menu.style.left = clickCoordsX + "px"; } if ((windowHeight - clickCoordsY) < menuHeight) { menu.style.top = windowHeight - menuHeight + "px"; } else { menu.style.top = clickCoordsY + "px"; } }
Meniul nostru merge destul de bine acum. Rămâne de făcut ceva cu redimensionarea ferestrei. Am vorbit deja despre cum face Dropbox, dar în schimb vom închide meniul contextual. [ Acest comportament este mult mai apropiat de standard.] Adăugați la funcția init rândul următor:
resizeListener ();
Și să scriem funcția în sine:
funcția resizeListener () (window.onresize = funcția (e) (toggleMenuOff (););)
Fabulos.

Conectarea evenimentelor la elementele din meniul contextual

Dacă aplicația dvs. este mai complexă acest exemplu, și planificați conținutul dinamic al meniului contextual, va trebui să vă aprofundați mai detaliat ceea ce se întâmplă pentru a vă gândi singur la detaliile lipsă. Totul este mai simplu în aplicația noastră și există un singur meniu cu un set constant de acțiuni. În acest fel, puteți verifica rapid ce element a fost selectat și procesați selecția respectivă. În exemplul nostru, pur și simplu vom salva elementul selectat într-o variabilă și vom scrie codul său de date și acțiunea selectată în consolă. Pentru a face acest lucru, să edităm marcajul meniului:

Apoi, să păstrăm în cache toate obiectele de care avem nevoie:
var contextMenuClassName = "meniu contextual"; var contextMenuItemClassName = "context-menu__item"; var contextMenuLinkClassName = "context-menu__link"; var contextMenuActive = "meniu-context - activ"; var taskItemClassName = "sarcina"; var taskItemInContext; var clickCoords; var clickCoordsX; var clickCoordsY; var meniu = document.querySelector ("# meniu contextual"); var menuItems = menu.querySelectorAll (". context-menu__item"); var menuState = 0; var menuWidth; var menuHeight; var menuPosition; var menuPositionX; var menuPositionY; var windowWidth; var windowHeight;
A apărut variabila taskItemInContext, căreia i se atribuie o valoare când faceți clic dreapta pe un element din listă. Avem nevoie de el pentru a înregistra ID-urile elementelor. Există, de asemenea, nume noi de clasă. Acum să trecem peste funcționalitate.

Funcția de inițializare rămâne aceeași. Prima modificare afectează contextListener, deoarece dorim să stocăm elementul pe care a făcut clic utilizatorul în taskItemInContext, iar funcția clickInsideElement doar îl returnează:
funcția contextListener () (document.addEventListener ("menu context", funcția (e) (taskItemInContext = clickInsideElement (e, taskItemClassName); if (taskItemInContext) (e.preventDefault (); toggleMenuOn (); positionMenu (e);) else taskItemInContext = null; toggleMenuOff ();)));)
Îl resetam la null dacă clicul dreapta nu a fost pe un element din listă. Ei bine, să trecem la clickListener. După cum am menționat mai devreme, de dragul simplității, vom trimite doar informații către consolă. Acum, la capturarea evenimentului clic, se fac mai multe verificări și meniul este închis. Să facem ajustări și să începem să procesăm clicul din meniul contextual efectuând o acțiune și abia apoi închizând meniul:
function clickListener () (document.addEventListener ("click", function (e)) (var clickeElIsLink = clickInsideElement (e, contextMenuLinkClassName); if (clickeElIsLink) (e.preventDefault (); else menuItemListener (clickeElIsLink) e.which || e. .button; dacă (buton === 1) (toggleMenuOff ();))));)
Este posibil să fi observat că funcția menuItemListener este apelată. O vom defini puțin mai târziu. Funcțiile keyupListener, resizeListener și positionMenu rămân neschimbate. Vom edita ușor funcțiile toggleMenuOn și toggleMenuOff, schimbând numele variabilelor pentru o mai bună lizibilitate a codului:
funcția toggleMenuOn () (dacă (menuState! == 1) (menuState = 1; menu.classList.add (contextMenuActive);)) funcția toggleMenuOff () (dacă (menuState! == 0) (menuState = 0; menu.classList .remove (contextMenuActive);))
În cele din urmă, implementăm menuItemListener:
funcția menuItemListener (link) (console.log ("Task ID -" + taskItemInContext.getAttribute ("data-id") + ", Task action -" + link.getAttribute ("data-action")); toggleMenuOff (); )
Aceasta completează dezvoltarea funcționalității.

Câteva remarci

Înainte de a termina, să ținem cont de câteva puncte:
  1. Pe parcursul acestui articol, m-am referit la clic dreapta ca eveniment pentru a deschide un meniu contextual. Nu toată lumea este dreptaci și nu toată lumea este expusă. setări standard soareci. Dar, indiferent de acest lucru, evenimentul meniu contextual acționează în conformitate cu setările mouse-ului și nu este atașat rigid la butonul din dreapta.
  2. Un alt punct important este că ne-am uitat doar la aplicații web desktop cu drepturi depline cu un mouse ca dispozitiv de intrare. Utilizatorii pot folosi tastatura sau dispozitive mobile așa că nu uitați să includeți moduri alternative interacțiune pentru a menține o interfață prietenoasă.

Mare întrebare

Am pus această problemă ca un articol separat, deoarece contează cu adevărat după tot ce am făcut. Întreabă-te: chiar ai nevoie de propriul tău meniu contextual? Aceste lucruri sunt grozave, dar înainte de a le folosi, trebuie să te asiguri că sunt cu adevărat utile în cazul tău. De obicei, utilizatorii se așteaptă la comportamentul familiar al aplicației. De exemplu, după ce fac clic dreapta pe o fotografie, se așteaptă să o poată salva, să copieze linkul etc. articolele necesareîn meniul personalizat îi pot supăra.

Compatibilitate browser

Tutorialul a folosit câteva chestii moderne CSS și JS, și anume afișare: flex în stiluri și classList pentru comutarea claselor în JS. De asemenea, merită menționat faptul că se folosesc etichete HTML5. Dacă dorești compatibilitate inversă cu browsere mai vechi, va trebui să-l implementați singur. Exemplele din acest tutorial au fost testate în următoarele browsere:
  • Chrome 39
  • Safari 7
  • Firefox 33

Concluzie și demonstrație

Dacă te-ai gândit cu atenție la toate și ești sigur că aplicația ta are nevoie de această funcționalitate, poți folosi meniul dezvoltat. Desigur, poate necesita unele modificări, dar acest manual descrie procesul de dezvoltare în detaliu, așa că nu ar trebui să fie atât de dificil să implementați amendamentele dvs.

Baza de cod pentru acest tutorial

Top articole similare