Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Iron
  • Kontekstni meni u Firefoxu. Kreiranje osnovne strukture

Kontekstni meni u Firefoxu. Kreiranje osnovne strukture

Izvorni kontekstni meni se rijetko koristi u interfejsu web stranice. Uostalom, korisniku uopće nije očito da je na nekom elementu potrebno kliknuti ne lijevom, već desnom tipkom miša i odabrati stavku sa liste. Osim toga, ne vole svi posjetitelji stranice koristiti desnu tipku miša, a na pametnim telefonima ona uopće ne postoji, već samo imitacija. Uprkos ovim karakteristikama, u HTML5 je moguće kreirati sopstvene kontekstne menije, što je do sada implementirano samo u Firefox-u, i to je vrlo neobično.

Prvo, da vidimo kako se općenito stvaraju različiti meniji. Da biste to učinili, koristite kombinaciju oznaka

I (primjer 1).

Primjer 1: Kontekstni meni

HTML5 IE Cr Op Sa Fx

Kontekstni meni

Atribut contextmenu nam govori da je naš meni kontekstni meni i istovremeno ukazuje na oznaku.

sa datim ID-om (in ovaj slučaj uredi). Za sada, nijedan pretraživač ne razumije gornji primjer, uključujući Firefox. Za njega umjesto oznake umetnite prilagođenu oznaku (primjer 2).

Primjer 2: Meni u Firefoxu

HTML5 IE Cr Op Sa Fx

Kontekstni meni

Ispostavilo se da je kod nevažeći, ali kada kliknete na sliku u Firefoxu, ona se pojavljuje prelep meni(Sl. 1).

Rice. 1. Kontekstni meni

Dok ovaj meni ne radi ispravno, pa hajde da ga promijenimo. Prvo, dodajmo ikonu pored stavke menija koristeći atribut ikone, tako da će meni biti ljepši. Vrijednost specificira relativnu ili apsolutnu putanju do grafičke datoteke. Zatim morate biti sigurni da kada kliknete na stavku menija, dođe do neke radnje. Da bismo to učinili, koristit ćemo onclick događaj i koristiti ga za pozivanje željenu funkciju. Primjer 3 prikazuje stvaranje kontekstni meni za tekst, ako u njemu odaberete "Uredi", tekst se može uređivati. U stvari, koristi se skriveno tekstualno polje koje postaje vidljivo kada se pozove funkcija edit (), dok je sam tekst skriven tokom uređivanja. Nakon što pritisnete Enter, tekst iz obrasca se ubacuje na svoje mjesto tekstualni paragraf, ostavljajući utisak da smo mi vladali. Obrazac je ponovo skriven nakon što je uređivanje završeno.

Primjer 3: Uređivanje teksta

HTML5 IE Cr Op Sa Fx

Kontekstni meni

Primer teksta

Pogled na novi meni je prikazan na sl. 2.

Rice. 2. Meni ikona

Kao što možete vidjeti iz primjera, kreiranje kontekstnog menija se ne razlikuje od kreiranja drugih interaktivnih elemenata. Kada se klikne na stavku menija, naša funkcija se poziva pomoću onclick rukovaoca, a onda će ova funkcija raditi ono što želimo. Firefox 8 je bio prvi pretraživač koji podržava HTML5 kontekst menije, ali je iznenađujuće zašto Firefox programeri uveo vlastitu prilagođenu oznaku za meni . Postoji nekoliko opcija za razvoj događaja:

  • tag biće dodan u HTML5 specifikaciju;
  • ova oznaka će postati zastarjela i neće biti podržana u budućim verzijama Firefoxa;

Ostaje samo čekati odgovor drugih pretraživača u kojima je oznaka će konačno biti implementiran, kao i različiti meniji na osnovu toga.

Uputstvo

Ako se pretraživač ne prikaže meni, a na ekranu vidite samo odabranu web stranicu, to znači da vaš pretraživač radi režim celog ekrana. Postoji nekoliko načina da se izvučete iz toga.

Ako je u padajućem izborniku meni ne postoji takva komanda, koristite prečicu na tastaturi Alt i Enter, koja vam omogućava da prelazite na i nazad u mnogim programima. Također u raznim pretraživači Promjena načina rada se vrši pomoću tipke F11.

Kada panel više nije skriven iza gornje ivice ekrana, pomaknite kursor na njega i kliknite desnim tasterom miša. Postavljeno u kontekst meni marker nasuprot stavke „Panel meni" ili "String meni” (formulacija zavisi od toga koji pretraživač je instaliran).

Poslije ovu akciju prozor pretraživača bi trebao prikazati standard meni bodova. Stavka "Datoteka" vam omogućava da upravljate prozorom programa, otvarate i zatvarate nove prozore i kartice, šaljete web stranice na štampanje.

Stavka "Uredi" sadrži standardne komande "Kopiraj", "Izreži", "Zalijepi", "Pronađi" i ne razlikuje se mnogo od sličan paragraf u bilo kom drugom programu. Iza izgled prozor pretraživača odgovara stavci "Pregled".

Pristup resursima koje je korisnik sačuvao vrši se pomoću stavke "Favoriti" ili "Oznake", meni"Servis" ili "Alati" vam omogućavaju da prilagodite pretraživač prema vašim potrebama.

Takođe na panelu meni mogu postojati i drugi alati, kao što su statusna traka, traka favorita, traka za navigaciju. Da biste prilagodili njihov prikaz, također pomaknite kursor na ploču, kliknite desnim gumbom miša na nju i odaberite u kontekstu meniželjene stavke označavajući ih markerom.

Izvori:

  • gdje je pretraživač

O broju grupa koje sviraju muziku svih pravaca od džeza do rep-kora može se proceniti posetom jednom klubu. Tokom večeri na binu izađe i do dva desetina. Da biste se izdvojili iz ove gomile, nije dovoljno puštati dobru muziku - potrebno je uložiti u svoju promociju. Ako tim nije spreman odvojiti se od velike količine, morate potražiti pomoć izvana.

Uputstvo

Sponzori su skloni partnerstvu sa grupama koje su već postigle uspeh. Stoga prije osvojite dovoljno veliku i stabilnu publiku. Da biste to uradili, pored muzike, pobrinite se i za scenografiju, specijalne efekte, interakciju muzičara na sceni, učinite svaki nastup malo novim.

Sastavite organizacije koje se nalaze u vašem području ili na području čije su aktivnosti direktno ili indirektno povezane s muzikom. Na drugoj listi navedite ostale organizacije koje nemaju veze s vama. Pomoć može doći s bilo kojeg mjesta, ali počnite s prvom listom.

Naučite moguće opcije. Prije nego kontaktirate bilo koju organizaciju, provjerite da li je sponzorisana iu kojoj oblasti; da li su se drugi muzičari prijavili i da li su odbijeni. Čak i ako vi sami, proučite njegov posao prije nego što donesete bilo kakvu odluku.

Za neko vrijeme ćete postati lice organizacije. Stoga, s obzirom na vašu kandidaturu, sponzor će biti vrlo izbirljiv oko vašeg izgleda. Ako niste spremni promijeniti svoj imidž radi usaglašenosti, ne računajte na pristanak. Potencijalni sponzor u pravilu ne insistira na takvoj promjeni, već jednostavno odbija. Ako ne uzmete u obzir kriterij izgleda, izgubit ćete vrijeme i, eventualno, šansu da se sretnete sa pravim sponzorom.

Ne slažite se ni u čemu. Svi uslovi moraju biti navedeni u ugovoru. Razgovarajte o svakoj tački sa advokatom. Ako vam nešto ne odgovara, nemojte se stidjeti. Bolje je sada saznati sve kontroverzne tačke nego se kasnije grickati za laktove zbog vlastite nepažnje.

Povezani video zapisi

Dnevnik "Favoriti" je neophodan kako se ne bi tražili oni resursi kojima korisnik često pristupa svakodnevni rad. To pruža brz pristup na prave materijale. Da biste pronašli "Favorite", potrebno je izvršiti nekoliko koraka.

Uputstvo

"Favoriti" postoje ne samo u pretraživačima, već se nalaze iu meniju bilo koje fascikle pohranjene na računaru. Pošto je traka menija uvek prisutna u fasciklama, ne morate ništa dodatno da konfigurišete. Otvorite fasciklu, izaberite stavku "Favoriti" iz menija klikom na nju levim tasterom miša, otvoriće se kontekstni meni. Da biste dodali fasciklu na listu, izaberite komandu "Dodaj u favorite" klikom na nju levim tasterom miša. Odabrani folder će se pojaviti u meniju.

Kada radite sa internet pretraživačima, možda ćete morati da prilagodite prikaz trake menija ili posebno dugme, sa kojim ćete pristupiti časopisu Favoriti. Da biste to uradili, u Internet Exploreru kliknite desnim tasterom miša na panel, u kontekstualnom meniju izaberite jednu od opcija dostupne opcije. Postavite marker ispred stavke "Menu Bar" - na ovaj način možete otvoriti "Favorite" na isti način kao što je opisano u prvom koraku.

Ako želite da se obeleživači prikažu na panelu pretraživača, izaberite stavku "Favorites Bar" u kontekstualnom meniju, takođe je označite markerom. Još jedna traka sa alatkama će biti dodata u prozor pretraživača. Ako smatrate da zauzima previše prostora, možete brzo pristupiti pravim resursima i na drugi način. Kliknite na ikonu zvjezdice na traci s alatima i dnevnik će se proširiti. Odaberite karticu "Favoriti" u njoj da vidite listu adresa web lokacija pohranjenih u dnevniku.

U pretraživaču Mozilla Firefoxčasopis sa listom resursa naziva se Bookmarks. Možete ga pozvati preko istoimene stavke u gornja linija meni tako što ćete postaviti prikaz "Favoriti" na traci sa alatkama ili otvaranjem časopisa "Biblioteka". Ovaj dnevnik se poziva na nekoliko načina: izaberite stavku "Obeleživači" na traci menija i komandu "Prikaži sve oznake" ili pritisnite kombinaciju Ctrl tipke, Shift i B. Otvorit će se dnevnik poseban prozor.

Prozor pretraživača je oblik grafičkog interfejsa koji korisnik koristi prilikom pretraživanja interneta. Istovremeno, prozor pretraživača je dobio ime zbog činjenice da, kao i običan prozor, ima pravougaoni oblik.

Pretraživač

Sama riječ "browser" došla je u ruski jezik iz engleskog, u kojem glagol "browse" znači "pregledati". Tako se danas u oblasti internet tehnologija koristi reč „pretraživač”. poseban program, koji je dizajniran za pregled informacija na Internetu.

Danas se ovaj tržišni segment stalno širi, tako da korisnici imaju priliku birati između više ili manje popularni pretraživači ovisno o tome koje funkcije i značajke dostupne u svakom od programa im se čine zgodnijima. Dakle, jedan od najčešće korišćenih pretraživača dugo vremena je „Internet Explorer“, koji je dugo bio lider u popularnosti među korisnicima, ali nekoliko drugih danas tvrdi njegovu poziciju. pogodni programi, kao što su "Mozilla Firefox", "Opera", " google chrome" i drugi.

Prozori pretraživača

Po pravilu, izbor određenog pretraživača se zasniva na tome koje funkcije nudi korisniku, kao i na pogodnosti njegovog interfejsa, odnosno grafičke organizacije stranice, za konkretnu osobu ko planira da ga instalira. U pogledu ovih parametara, navedeni pretraživači imaju prilično uočljive razlike, međutim, postoji niz parametara interfejsa koji su isti za sve takve programe.

Jedan od ovih parametara je i oblik pružanja informacija sa web stranice. U svim pretraživačima koji danas postoje, predstavljen je u obliku takozvanog prozora - pravokutnog polja u kojem se prikazuje tekst, slike, video ili druge informacije. Prozor pretraživača se može proširiti na Cijeli ekran, odnosno ispunite njime cijeli prostor na monitoru ili koristite komprimirani oblik prezentacije prozora klikom na simbol u obliku dva kvadrata desno gornji ugao ekran. Osim toga, prozor koji vam više nije potreban može se zatvoriti klikom na simbol križa ili minimizirati, odnosno privremeno ukloniti iz prikaza, klikom na simbol crtice.

Svaki prozor pretraživača može otvoriti jedan ili više dodatne kartice za pristup više web stranica u isto vrijeme. Ovo se može uraditi pomeranjem kursora miša na gornji dio ekran. U nekim pretraživačima ova funkcija je prikazana kao simbol plus, dok se u drugim prikazuje kao malo slobodno polje pored naziva već otvorenog sajta. Da bi se zatvorio odvojena kartica, morate kliknuti i na simbol krsta - onaj koji se nalazi na desnoj strani kartice.

Glavni elementi prozora u bilo kojem pretraživaču su adresna traka i glavno polje za prikaz informacija. Adresna traka prikazano na vrhu prozora pretraživača. Obično počinje znakovima "www" ili "http://" i predstavlja slovni kod koji će vas odvesti na stranicu koja vam je potrebna. Trenutno, adrese stranica u Internet na ruskom govornom području može se kucati i latinicom i ćirilicom. U glavnom polju možete vidjeti najviše različiti tekstovi, slike, video zapisi i druge informacije, čiji sastav zavisi od sadržaja stranice koju gledate.

Izvori:

  • Šta je web pretraživač, prozor pretraživača i adresna traka?

U ovoj lekciji pobliže ćemo pogledati funkcije vrlo koristan ključ, koji se nalazi na bilo kojoj tastaturi. Ovaj taster se zove "taster kontekstnog menija". Nalazi se u donjem desnom dijelu tastature između ALT tasteri i CTRL



Kada se pritisne ovaj taster, poziva se KONTEKST MENI, potpuno isti kao da ste pritisnuli DESNI taster miša.

Karakteristika ovog dugmeta je da će meni koji se poziva kada se pritisne prikazati funkcije (stavke menija) koje se mogu primeniti aktuelni program, in aktivni prozor, desktop, itd. One. ovaj meni se prilagođava procesu u kojem direktno radite i to je vrlo zgodno.

Pogledajmo sada pobliže glavne opcije za prikaz kontekstnog menija u različitim okruženjima i funkcije koje se mogu izvoditi pomoću ovog menija.



Kada pritisnete DESNI taster miša ili taster "Kontekst meni" na radnoj površini Windows radna površina 7 pojavljuje se sljedeći meni:



1. Na samom vrhu menija - podešavanje parametara vaše video kartice.
2. Pogled - podešavanje prikaza ikona na radnoj površini




3. Sortiranje - podešavanje sortiranja prikazivanjem ikona na radnoj površini




4. Osvježi - Osvježava prikaz sadržaja na radnoj površini.
5. Zalijepi - ako ste nešto kopirali, možete to zalijepiti na radnu površinu.
6. Kreirajte. Ovdje možete kreirati na radnoj površini: folder, prečicu, tekstualni dokument, arhivu, MS Office dokumente - Word, Excel, PowerPoint itd. (ako je instaliran)




7. Rezolucija ekrana. Ovdje možete postaviti potrebna podešavanja ekrana: odabrati ekran (može ih biti nekoliko), saznati ili postaviti rezoluciju ekrana, odrediti orijentaciju ekrana, a također konfigurirati druge postavke ekrana, na primjer, povezati projektor.



8. Gadgeti - izbor i instalacija Windows gadgeti 7. Ne postoji takva funkcija u Windows XP-u.




9. Personalizacija. Ovdje možete prilagoditi izgled radne površine, promijeniti pozadinu, početni ekran, zvukove, temu, boju prozora itd.





Kada pritisnete DESNI taster miša ili taster "Kontekst meni" na fajlu u Exploreru ili bilo kom drugom file manager meni je takođe prilagođen datoteci određeni tip. Na primjer, kliknuo sam na video fajl. Otvara se sljedeći meni:




U ovom slučaju, meni nudi funkcije koje odgovaraju specifično video fajlu, a to su: reprodukcija, dodavanje na listu plejera koji je podrazumevano izabran za ovog tipa fajl. I niz standardnih funkcija: otvaranje pomoću, dodavanje u arhivu (ako je arhiver instaliran), slanje, izrezivanje, kopiranje, brisanje, preimenovanje i svojstva datoteke.

Ako kliknete na DESNI taster miša ili dugme "Kontekst meni". grafički fajl, tada će se otvoriti meni koji će odgovarati tipu grafičke datoteke:




Ovdje možete odmah otvoriti, urediti ili odštampati odabranu datoteku u zadanom programu za slike. U mom slučaju, ovo je program ACDSee.

Ovdje možete odmah napraviti odabranu datoteku pozadinska slika za desktop, vrlo zgodno kada birate velika lista. A onda opet postoje standardne funkcije za rad s datotekama.

Zadržaću se detaljnije na tačkama „Otvori sa“ i „Pošalji“.

Prednosti funkcije "Otvori sa".




Ovdje možete odabrati ili dodijeliti rad sa odabranom datotekom bilo koje instalirani program, koji razumije odabrani format datoteke. U ovom slučaju, kliknuo sam na video fajl i nekoliko programa može raditi sa ovim formatom na mom računaru: Light Allow, WinAmp i naravno Windows Media igrač.

Ako lista ne sadrži željeni program, ali sigurno znate da je instaliran, odaberite stavku menija "Odaberi program". Windows će od vas tražiti da odaberete programe sa liste preporučenih ili drugih programa. U Windows XP, izgled ovog prozora je malo drugačiji, ali značenje je isto.




Ako želite da odabrani format datoteke uvijek otvara program koji odaberete, označite polje za potvrdu "Koristi odabrani program za sve datoteke ove vrste".

Ako se željeni program ne nalazi na listi preporučenih programa ili u drugim, ali sigurno znate da je program instaliran, kliknite na dugme "Pretraži ..." i izaberite ga iz fascikle u kojoj je program instaliran.

Čemu služi funkcija "Pošalji".
Koristeći ovu funkciju, možete poslati (prenijeti, prenijeti) odabranu datoteku putem BlueTooth-a (bluetooth-a), skype-a, mail-a, na radnu površinu, u arhivu, za pisanje na CD/DVD disk, na USB fleš disk itd.






I ovdje se meni prilagođava različite situacije, ovisno o tome gdje kliknete na web stranicu. Na primjer, ako kliknete na vezu, otvorit će se sljedeći meni:




Pomoću ovog menija možete otvoriti sadržaj linka u novoj kartici ili prozoru, označiti link, poslati link, kopirati vezu, ako je veza datoteka, možete je sačuvati sa "Save Target As.. .". Ako imate instalirane programe za preuzimanje, uz njihovu pomoć možete preuzeti sadržaj linka.

Ako kliknete DESNI taster miša ili taster "Kontekst meni" na slici na web stranici, otvoriće se meni sa drugim funkcijama:




Ovdje možete kopirati sliku u međuspremnik i zalijepiti, na primjer, u word dokument, sliku možete sačuvati na računar koristeći "Sačuvaj sliku kao ...", poslati sliku poštom, napraviti odabranu sliku pozadinski uzorak desktop, saznajte informacije o slici (tip, veličina, naziv datoteke) itd.

Dozvolite mi da sumiram. U ovoj lekciji pogledali smo najpopularnije opcije za korišćenje kontekstnog menija, koji se poziva klikom na DESNI taster miša ili pritiskom na taster "Kontekst meni" na tastaturi.
naime:
1. Pritiskom na DESNU tipku miša ili tipku "Kontekstni meni" na Windows radnoj površini

2. Pritiskom na DESNU tipku miša ili tipku "Kontekstni meni" na datoteku ili folder u Exploreru ili bilo kojem drugom upravitelju datoteka.

3. Pritiskom na DESNI taster miša ili taster "Kontekst meni" u bilo kom Internet pretraživaču.

esencija ovu lekciju je da naučite kako da koristite korisne karakteristike specifičnog aktivnog okruženja vašeg računara. U bilo kom okruženju, klikom na DESNU tipku miša ili pritiskom na tipku "Kontekst meni" dobićete listu korisne karakteristike dostupno u ovog trenutka vrijeme u odnosu na odabrani objekt.

  • Prevod
  • tutorial

Web aplikacije danas postaju novi korak u razvoju weba. Ovo su daleko od običnih informativnih stranica. Gmail i Dropbox su primjeri naprednih web aplikacija. Kako funkcionalnost, pristupačnost i korisnost web aplikacija raste, raste i potreba za povećanjem efikasnosti njihovog korištenja. Ovaj vodič će se baviti kreiranjem tako korisne stvari kao što je vaš vlastiti kontekstni meni, a posebno:

  1. Hajde da shvatimo šta je kontekstni meni i zašto je potreban.
  2. Naš kontekstni meni implementiramo koristeći JS i CSS.
  3. Dotaknimo se nedostataka i ograničenja pristupa koji se koristi kako bismo znali na koje probleme nas mogu upozoriti prilikom uvođenja svega ovoga u proizvodnju.

Šta je kontekstni meni?

Prema Wikipediji, kontekstni meni je meni koji se pojavljuje kada korisnik stupi u interakciju sa njim GUI(pritiskom na desnu tipku miša). Kontekstni meni sadrži ograničen skup moguće radnje, koji je obično povezan sa odabranim objektom.

Na vašem računaru, desnim klikom na radnu površinu otvoriće se kontekstni meni operativni sistem. Odavde vjerovatno možete kreirati novi folder, informišite se i uradite nešto drugo. Kontekstni meni u pretraživaču omogućava, na primer, da dobijete informacije o stranici, pogledate njen izvorni kod, sačuvate sliku, otvorite vezu u novoj kartici, radite sa međuspremnikom i tako dalje. I set dostupne radnje zavisi od toga gde ste tačno kliknuli, odnosno od konteksta. Ovo je standardno ponašanje koje su postavili programeri pretraživača [ I proširenja za to].

Web aplikacije polako počinju da zamenjuju standardne kontekstne menije svojim. Gmail i Dropbox su sjajni primjeri. Pitanje je samo kako napraviti svoj vlastiti kontekstni meni? U pretraživaču, desni klik pokreće događaj kontekstnog menija. Morat ćemo poništiti zadano ponašanje i učiniti ga tako da umjesto standardni meni naši su izašli. Ovo nije tako teško, ali ćemo to razumjeti korak po korak, tako da će ispasti prilično obimno. Za početak ćemo kreirati osnovnu strukturu aplikacije tako da primjer koji se razvija ne bude potpuno van dodira sa stvarnošću.

Lista zadataka

Zamislimo da kreiramo aplikaciju koja nam omogućava da održavamo listu zadataka. Razumijem da ste vjerovatno već nevjerovatno umorni od svih ovih lista zadataka, ali neka bude tako. Stranica aplikacije sadrži listu zadataka na čekanju. Za svaki zadatak dostupan je tipičan skup CRUD akcija: dobiti informacije o zadatku, dodati novi, urediti, izbrisati.

Primjer rezultata je na CodePenu. Možete odmah pogledati tamo ako ste previše lijeni za čitanje ili želite biti sigurni da ste zaista zainteresirani za dalje čitanje. Pa, hajde da počnemo razvoj korak po korak začeto. Koristiću neke moderne CSS trikove i kreirati jednostavnu listu obaveza sa atributima podataka. Također ću koristiti resetovanje stila Erica Meyera i resetirati svojstvo veličine kutije svih elemenata u okviru:
*, *::prije, *::poslije ( box-sizing: border-box; )
Neću koristiti CSS prefikse, ali CodePen demo uključuje automatski prefiks.

Kreiranje osnovne strukture

Otvorimo naš HTML dokument, dodamo zaglavlje, dio sadržaja sa listom zadataka i podnožje. Također ću podesiti Font Awesome i Roboto font kako bi izgledao malo bolje. Svaki zadatak mora sadržavati data-id atribut, koji bi zapravo bio preuzet iz baze podataka. Također, svaki zadatak će sadržavati listu radnji. Evo važnih dijelova oznake:
  • Idi do trgovine

Ako koristite CodePen, možete omogućiti automatski prefiks i omogućiti CSS reset u postavkama. U suprotnom, sve ćete morati raditi ručno, ako još niste automatizirali ovaj proces. Ne zaboravite da je naš cilj kreiranje kontekstnog menija, tako da neće biti implementirano rukovanje akcijama. Sada dodajmo još malo CSS-a:
/* zadaci */ .tasks ( stil liste: nema; margina: 0; padding: 0; ) .task ( display: flex; justify-content: space-between; padding: 12px 0; border-bottom: solid 1px # dfdfdf; ) .task:last-child ( border-bottom: none; )
Kompletan set stilova (i svega ostalog) predstavljen je na CodePenu. A ovdje će biti najvažniji dijelovi koda, oznake i dizajna. Ali hajde da se konačno približimo našem kontekstualnom meniju.

Skiciranje našeg kontekstnog menija - markup

Osnova našeg menija je ista kao i bilo koji drugi meni - neuređena lista ugniježđena u navigacijski tag. Svaka radnja će biti predstavljena kao stavka liste sa vezom. Svaki link je odgovoran za određenu radnju. Kao što sam ranije spomenuo, potrebne su nam tri akcije u kontekstualnom meniju:
  1. Pregled zadataka.
  2. Uređivanje zadatka.
  3. Brisanje zadatka.
Dodajmo oznaku:

Ako nemate ideju gdje da stavite ovu oznaku, stavite je prije zatvaranja oznaka tijela. Prije nego pređemo na CSS, razjasnimo nekoliko stvari:
  1. Želimo da se kontekstni meni pojavi tamo gde je napravljen desni klik, što znači da mu je potrebno apsolutno pozicioniranje. Stoga ne biste trebali stavljati njegovu oznaku u kontejner s relativnim pozicioniranjem.
  2. Potrebne su nam neke varijable ili atributi kako bismo mogli odrediti kojem zadatku pripada odabrana akcija.
A sada stilovi.

Sređivanje našeg menija - CSS

Potreba je već spomenuta. apsolutno pozicioniranje razvijen meni. Također, postavite svojstvo z-index na 10. Imajte na umu da vaša aplikacija može zahtijevati drugačiju vrijednost. Ovo nisu svi mogući stilovi, druge ljepote su prikazane u demo-u, ali one već zavise od vaših potreba i nisu obavezne. Prije nego pređemo na JS, učinimo meni nevidljivim prema zadanim postavkama i dodajmo ekstra klasa da ga prikažete.
.kontekst-meni (prikaz: nema; pozicija: apsolutna; z-indeks: 10; ) .kontekst-meni--aktivan (prikaz: blok; )

Proširivanje kontekstnog menija - JavaScript

Počnimo tako što ćemo pogledati kako registrirati događaj kontekstnog izbornika. Otvorimo samoizvršnu funkciju i uhvatimo događaj na cijelom dokumentu. Događaj ćemo također prijaviti na konzolu kako bismo dobili neke informacije:
(function() ( "koristi strogo"; document.addEventListener("contextmenu", function(e) ( console.log(e); )); ))();
Ako otvorite konzolu i negdje kliknete desnim tasterom miša, vidjet ćete da je događaj zaista prikazan tamo. Postoji mnogo različitih informacija koje možemo koristiti. Posebno nas zanimaju koordinate. Prije nego što zaobiđemo zadano ponašanje, imajmo na umu da to ne treba raditi za cijeli dokument, već samo za stavke na listi zadataka. Imajući to na umu, morat ćete slijediti sljedeće korake:
  1. Morat ćete proći kroz sve stavke na listi zadataka i svakoj od njih dodati rukovao događajima kontekstnog izbornika.
  2. Za svaki rukovalac ćemo otkazati standardno ponašanje.
  3. Zabilježit ćemo događaj i element na koji se odnosi u konzolu.
Generalno, radimo nešto ovako:
(function() ( "koristi strogo"; var taskItems = document.querySelectorAll(".task"); for (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); }); } })();
Ako pogledate konzolu, možete vidjeti da se jedinstveni događaj pokreće svaki put kada se klikne na stavku sa liste zadataka. Sada, pored otkazivanja zadanog ponašanja, implementiramo prikaz kontekstnog menija dodavanjem pomoćne klase u njega.

Ali prvo, dodajmo ID u meni kako bismo ga lakše dobili kroz JS. Takođe dodajte varijabla stanja meni menuState i varijabla sa aktivnom klasom. Postoje tri varijable:
var menu = document.querySelector("#context-menu"); var menuState = 0; var active = "kontekst-meni--aktivan";
Idemo dalje. Pogledajmo ponovo funkciju contextMenuListener i dodajmo toggleMenuOn za prikaz menija:
funkcija contextMenuListener(el) ( el.addEventListener("contextmenu", function(e) ( e.preventDefault(); toggleMenuOn(); )); ) funkcija toggleMenuOn() ( if (menuState !== 1) ( menuState = 1 ;menu.classList.add(active); ) )
U ovom trenutku, desnim dugmetom miša već možete pozvati naš kontekstni meni. Ali ne može se reći da radi ispravno. Prvo, uopšte nije tamo gde bismo želeli da bude. Potrebno je malo matematike da se riješi problem. Drugo, ovaj meni još nije moguće zatvoriti. S obzirom na to kako funkcioniraju normalni kontekstni meniji, željeli bismo da se naša implementacija zatvori kada se klikne na meni i kada se pritisne Escape. Pored toga, kada kliknete desnim tasterom miša van našeg menija, trebalo bi da se zatvori, a umesto toga zahteva da se otvori podrazumevani meni. Hajde da pokušamo sve ovo da rešimo.

Refaktorisanje našeg koda

Očigledno, tri glavna događaja će biti odgovorna za sve akcije:
  1. contextmenu - Provjerite status i proširite kontekstni izbornik.
  2. kliknite - Sakrij meni.
  3. keyup - Rukovanje pritiskom na tipke. U ovom priručniku samo je ESC od interesa.
Također će nam trebati nekoliko pomoćnih funkcija, pa dodajmo dio kodu za njih. Tako imamo:

Puno koda

(function() ( "koristi strogo"; /////////////////////////////////////// /////////////////////// /////////////////////////// ////////// // // POMOĆNE FUNKCIJE // POMOĆNE FUNKCIJE // / /////////////////////////// ///////// ///////////// /////////////////////////// ** * Ovdje neke pomoćne funkcije ///////////////////////////////// ///////// ///////// ////////////////////// // // KOREFUNKCIJE // KOREFUNKCIJE // ///////// ///////// ///////////////////// /////////////////// ///////// /////////// /** * Varijable.* Varijable.*/ var taskItemClassName = "zadatak"; var menu = document.querySelector("#context-menu "); var menuState = 0; var activeClassName = "context-menu--active"; /** * Inicijalizirajte kod naše aplikacije. * Inicijalizirajte kod naše aplikacije. */ funkcija init() ( contextListener(); clickListener( ); keyupListener(); ) /* * * Sluša događaje kontekstnog menija.* Rukovati događajem kontekstnog menija.*/ zabava action contextListener() ( ) /** * Sluša klikove. * Tretman kliknite događaji. */ funkcija clickListener() ( ) /** * Sluša ključne događaje. * Rukovanje događajem ključa. */ function keyupListener() ( ) /** * Uključuje prilagođeni kontekstni meni. * Prikaz kontekstnog menija. */ funkcija toggleMenuOn() ( if (menuState !== 1) ( menuState = 1; menu.classList.add(activeClassName); ) ) /** * Pokrenite aplikaciju. * Pokretanje aplikacije. */u tome(); ))();


Sada ne ponavljamo elemente liste. Umjesto toga, obrađivat ćemo događaj kontekstnog izbornika kroz cijeli dokument, provjeravajući pripada li nekom od zadataka. Stoga je uvedena varijabla taskItemClassName. To ćemo uraditi koristeći pomoćna funkcija clickInsideElement koji uzima dva parametra:
  1. Sam događaj se provjerava.
  2. Ime klase za upoređivanje. Ako se događaj dogodio unutar elementa koji ima navedenu klasu, ili roditelj ovog elementa ima takvu klasu, tada se ovaj element mora vratiti.
Evo prve pomoćne funkcije:
funkcija clickInsideElement(e, className) ( var el = e.srcElement || e.target; if (el.classList.contains(className)) ( vrati el; ) else ( while (el = el.parentNode) ( if (el .classList && el.classList.contains(className)) ( return el; ) ) ) return false; )
Vratimo se nazad i uredimo contextListener:
funkcija contextListener() (document.addEventListener("contextmenu", function(e) ( if (clickInsideElement(e, taskItemClassName)) ( e.preventDefault(); toggleMenuOn(); ) )); )
Imajući pomoćnu funkciju koja radi neke prljave poslove umjesto nas i hvatajući događaj kontekstnog izbornika na cijelom dokumentu, sada možemo zatvoriti meni kada se klikne izvan njega. Da biste to učinili, dodajte funkciju toggleMenuOff i uredite contextListener:
funkcija contextListener() (document.addEventListener("contextmenu", function(e) ( if (clickInsideElement(e, taskItemClassName)) ( e.preventDefault(); toggleMenuOn(); ) else ( toggleMenuOff(); ) )); ) funkcija toggleMenuOff() ( if (menuState !== 0) ( menuState = 0; menu.classList.remove(activeClassName); ) )
Sada kliknite desnim tasterom miša na stavku liste. A onda - negde drugde u dokumentu. Voila! Naš meni je zatvoren, a standardni meni otvoren. Zatim ćemo uraditi nešto slično za klik događaj, tako da ga zatvori više od jednog desnog dugmeta:
funkcija clickListener() (document.addEventListener("klik", funkcija(e) ( var dugme = e.which || e.button; if (dugme === 1) ( toggleMenuOff(); ) )); )
Ovaj dio koda se malo razlikuje od prethodnog jer Firefox. Poslije desno dugme miš je pušten, događaj klika se aktivira u Firefoxu, tako da ovdje moramo dodatno provjeriti da li je zapravo bilo lijevog klika. Sada meni ne treperi desnim klikom. Dodajmo sličan rukovalac kliku ESC tasteri:
funkcija keyupListener() ( window.onkeyup = function(e) ( if (e.keyCode === 27) ( toggleMenuOff(); ) ) )
Dobili smo meni koji se otvara i zatvara kako je predviđeno, u interakciji s korisnikom na prirodan način. Hajde da konačno pozicioniramo meni i pokušamo da upravljamo događajima unutar njega.

Pozicioniranje našeg kontekstnog menija

S obzirom na trenutni HTML i CSS, naš meni je prikazan na dnu ekrana. Ali želimo da se pojavi tamo gdje je došlo do klika. Ispravimo ovaj nesretni propust. Prvo, dodajmo još jednu pomoćnu funkciju koja dobija tačne koordinate klika. Nazovimo ga getPosition i pokušajmo ga natjerati da obrađuje razne hirovite preglednika:
funkcija 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; ) inače if (e.clientX || e.clientY) ( posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft; posy = e.clientY + document.body.scrollTop + document.documentElement. scrollTop; ) povratak ( x: posx, y: posy ) )
Naš prvi korak u pozicioniranju menija je postavljanje tri varijable. Dodajmo ih u odgovarajući blok koda:
varmenuPosition; varmenuPositionX; varmenuPositionY;
Kreirajmo funkciju positionMenu koja uzima jedan argument - događaj. Za sada neka ispiše koordinate menija na konzoli:
funkcija positionMenu(e) ( menuPosition = getPosition(e); console.log(menuPosition); )
Uredimo contextListener da započnemo proces pozicioniranja:
funkcija contextListener() (document.addEventListener("contextmenu", function(e) ( if (clickInsideElement(e, taskItemClassName)) ( e.preventDefault(); toggleMenuOn(); positionMenu(e); ) else ( toggleMenuOff(); ) ));
Ponovo uđite u kontekstni meni i pogledajte konzolu. Provjerite je li pozicija zaista dostupna i evidentirana. Možemo koristiti inline stilove za postavljanje gornjih i lijevih svojstava putem JS-a. To je nova verzija meni pozicija:
funkcija positionMenu(e) ( menuPosition = getPosition(e); menuPositionX = menuPosition.x + "px"; menuPositionY = menuPosition.y + "px"; menu.style.left = menuPositionX; menu.style.top = menuPositionY; )
Nazovite sada svuda. Jelovnik je svuda! Ovo je sjajno, ali postoji nekoliko stvari koje treba riješiti:
  1. Šta se dešava ako korisnik klikne blizu desne ivice prozora? Kontekstni meni će ići dalje od toga.
  2. Šta ako korisnik promijeni veličinu prozora dok je kontekstni meni otvoren? Javlja se isti problem. Dropbox rješava ovaj problem skrivajući x-overflow (x-overflow: skriven).
Hajde da rešimo prvi problem. Koristimo JS da odredimo širinu i visinu našeg menija i proverimo da li se meni savršeno uklapa. U suprotnom ćemo ga malo pomjeriti. Ovo će zahtijevati malo matematike i razmišljanja, ali mi ćemo to učiniti jednostavno i korak po korak. Prvo, provjerimo širinu i visinu prozora. Zatim pronađite širinu i visinu menija. Zatim provjerite je li razlika između koordinata klika i širine uvučenog prozora veća od širine menija. I mi ćemo učiniti isto za visinu. Ako meni ne stane na ekran, prilagodite njegove koordinate. Počnimo dodavanjem dvije varijable:
varmenuWidth; varmenuHeight;
Kao što se sećate, naš meni je podrazumevano skriven, tako da ne možete samo uzeti i izračunati njegovu veličinu. U našem slučaju, meni je statičan, ali sa prava primena njegov sadržaj se može mijenjati ovisno o kontekstu, pa je bolje izračunati širinu i visinu u trenutku otvaranja. Uzmimo tražene vrijednosti unutar funkcije positionMenu:
menuWidth = menu.offsetWidth; menuHeight = menu.offsetHeight;
Hajde da uvedemo još dvije varijable, ali ovaj put za veličinu prozora:
varwindowWidth; varwindowHeight;
Izračunajmo njihove vrijednosti na sličan način:
windowWidth = window.innerWidth; windowHeight = window.innerHeight;
Na kraju, pretpostavimo da želimo da prikažemo meni ne bliže od 4 piksela od ivice prozora. Možete uporediti vrijednosti, kao što sam rekao gore, i podesiti poziciju otprilike ovako:
var clickCoords; var clickCoordsX; var clickCoordsY; // ažurirana funkcija funkcije positionMenu positionMenu(e) ( clickCoords = getPosition(e); clickCoordsX = clickCoords.x; clickCoordsY = clickCoords.y; menuWidth = menu.offsetWidth + 4; menuHeight = menu.offsetHeight + 4; windowWidth = prozor. 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"; } }
Sada se naš meni prilično dobro ponaša. Ostaje učiniti nešto sa promjenom veličine prozora. Već sam govorio o tome kako Dropbox to radi, ali umjesto toga ćemo zatvoriti kontekstni meni. [ Ovo ponašanje je mnogo bliže standardu] Dodajte funkciji init sljedeći red:
resizeListener();
I napišimo samu funkciju:
funkcija resizeListener() ( window.onresize = function(e) ( toggleMenuOff(); ); )
Sjajno.

Povezivanje događaja na stavke kontekstnog menija

Ako je vaša aplikacija složenija ovaj primjer, a imate planiran sadržaj dinamičkog kontekstnog menija, morat ćete dublje zaroniti u ono što se dalje događa kako biste sami shvatili detalje koji nedostaju. U našoj aplikaciji sve je jednostavnije, a postoji samo jedan meni sa stalnim skupom radnji. Tako možete brzo provjeriti koji je element odabran i obraditi ovaj odabir. U našem primjeru, jednostavno pohranjujemo odabrani element u varijablu i zapisujemo njegov ID podataka i odabranu akciju na konzolu. Da biste to učinili, uredite oznaku menija:

Zatim keširamo sve potrebne objekte:
var contextMenuClassName = "kontekst-meni"; var contextMenuItemClassName = "context-menu__item"; var contextMenuLinkClassName = "kontekst-meni__link"; var contextMenuActive = "kontekst-meni--aktivan"; var taskItemClassName = "zadatak"; var taskItemInContext; var clickCoords; var clickCoordsX; var clickCoordsY; var menu = document.querySelector("#context-menu"); var menuItems = menu.querySelectorAll(".context-menu__item"); var menuState = 0; varmenuWidth; varmenuHeight; varmenuPosition; varmenuPositionX; varmenuPositionY; varwindowWidth; varwindowHeight;
Pojavila se varijabla taskItemInContext, kojoj se dodjeljuje vrijednost kada se desnim klikom miša klikne na stavku liste. Trebat će nam da evidentiramo ID-ove elemenata. Tu su i nova imena klasa. Sada idemo kroz funkcionalnost.

Funkcija inicijalizacije ostaje ista. Prva promjena utječe na contextListener, jer želimo pohraniti element na koji je korisnik kliknuo u taskItemInContext, a funkcija clickInsideElement ga samo vraća:
funkcija contextListener() (document.addEventListener("contextmenu", function(e) ( taskItemInContext = clickInsideElement(e, taskItemClassName); if (taskItemInContext) ( e.preventDefault(); toggleMenuOn(); positionMenu(e); ) else ( taskItemInContext = null; toggleMenuOff(); ) )); )
Resetujemo ga na nultu vrednost ako desni klik nije bio na stavci liste. Pa, hajde da uzmemo clickListener. Kao što sam ranije spomenuo, radi jednostavnosti, jednostavno ćemo ispisati informacije na konzoli. Sada, kada se uhvati događaj klika, vrši se nekoliko provjera i meni se zatvara. Napravimo podešavanja i počnimo sa obradom klika unutar kontekstnog menija, izvršimo neku radnju i tek nakon toga zatvorimo meni:
funkcija clickListener() (document.addEventListener("click", function(e) ( var clickeElIsLink = clickInsideElement(e, contextMenuLinkClassName); if (clickeElIsLink) ( e.preventDefault(); menuItemListener(clickeElIsLink) (var). e.which || e.button;if (dugme === 1) ( toggleMenuOff(); ) ) )); )
Možda ste primijetili da se poziva funkcija menuItemListener. Definisaćemo to nešto kasnije. Funkcije keyupListener, resizeListener i positionMenu ostaju nepromijenjene. Lagano ćemo urediti funkcije toggleMenuOn i toggleMenuOff, mijenjajući nazive varijabli radi bolje čitljivosti koda:
funkcija toggleMenuOn() ( if (menuState !== 1) ( menuState = 1; menu.classList.add(contextMenuActive); ) ) funkcija toggleMenuOff() ( if (menuState !== 0) ( menuState = 0; menu.classList); .remove(contextMenuActive); ) )
Konačno implementiramo menuItemListener:
function menuItemListener(link) ( console.log("ID ​​zadatka - " + taskItemInContext.getAttribute("data-id") + ", Radnja zadatka - " + link.getAttribute("data-action")); toggleMenuOff(); )
Time je završen razvoj funkcionalnosti.

Neke primjedbe

Prije nego što završimo, razmotrimo neke tačke:
  1. U cijelom članku spomenuo sam desni klik kao događaj za otvaranje kontekstnog menija. Nisu svi dešnjaci i nisu svi izloženi standardne postavke miševi. Ali bez obzira na to, događaj kontekstnog menija deluje tačno u skladu sa postavkama miša i nije čvrsto vezan za desno dugme.
  2. Još jedan važna tačka je da smo razmatrali samo punopravne desktop web aplikacije sa mišem kao ulaznim uređajem. Korisnici mogu koristiti tastaturu ili mobilnih uređaja pa obavezno uključite alternativnim načinima interakcije za održavanje prijateljskog interfejsa.

veliko pitanje

Izdvojio sam ovo pitanje kao posebnu stavku jer je zaista važno nakon svega što smo uradili. Zapitajte se: da li vam je zaista potreban vlastiti kontekstni meni? Ove stvari su cool, ali prije nego što ih koristite, morate se uvjeriti da su zaista korisne u vašem slučaju. Korisnici obično očekuju poznato ponašanje aplikacije. Na primjer, nakon desnog klika na fotografiju, očekuju da će je moći sačuvati, kopirati vezu i tako dalje. prave stavke u prilagođenom meniju može ih uznemiriti.

Kompatibilnost pretraživača

Tutorijal je koristio neke moderne stvari iz CSS-a i JS-a, odnosno display: flex in styles i classList za promjenu klasa u JS-u. Također je vrijedno spomenuti da se koriste HTML5 oznake. Ako želiš kompatibilnost unatrag sa starijim pretraživačima, morat ćete ga sami implementirati. Primjeri u ovom vodiču testirani su na sljedećim pretraživačima:
  • Chrome 39
  • Safari 7
  • Firefox 33

Zaključak i demo

Ako ste pažljivo razmislili i sigurni ste da vaša aplikacija treba takvu funkcionalnost, možete koristiti razvijeni meni. Naravno, to može zahtijevati neke promjene, ali ovaj priručnik detaljno opisuje proces razvoja, tako da ne bi trebalo biti tako teško implementirati vaše izmjene.

Baza koda za ovaj vodič

Top Related Articles