Atraskite CSS judėjimo trajektorijos interpoliavimo algoritmus ir kurkite sklandžias, patrauklias animacijas pasaulinei auditorijai įvairiose platformose.
CSS judėjimo trajektorijos interpoliavimo algoritmas: sklandžių trajektorijos animacijų kūrimas pasaulinei auditorijai
Nuolat besikeičiančiame interneto dizaino ir kūrimo pasaulyje vartotojo patirtis (UX) yra svarbiausia. Svarbiausia – sudominti vartotojus, patraukti jų dėmesį ir sklandžiai vesti juos per skaitmenines sąsajas. Viena galinga technika, kuri ženkliai pagerina UX, yra animacija. Tarp daugybės CSS animacijos galimybių judėjimo trajektorija (Motion Path) išsiskiria gebėjimu animuoti elementus sudėtingomis SVG trajektorijomis. Tačiau norint pasiekti tikrai sklandų ir natūraliai atrodantį judesį, reikia gerai išmanyti pagrindinius interpoliavimo algoritmus. Šiame įraše gilinamasi į žavų CSS judėjimo trajektorijos interpoliavimo pasaulį, siūlant įžvalgas kūrėjams visame pasaulyje, kaip kurti sudėtingas ir sklandžias animacijas.
Judėjimo trajektorijos galia
Prieš nagrinėdami algoritmus, trumpai apžvelkime, ką siūlo CSS judėjimo trajektorija. Ji leidžia apibrėžti trajektoriją (dažniausiai SVG trajektoriją) ir tada prijungti elementą prie šios trajektorijos, animuojant jo padėtį, pasukimą ir mastelį jos judėjimo kelyje. Tai atveria daugybę galimybių – nuo sudėtingų produktų demonstracijų ir interaktyvių infografikų iki įtraukiančių naujų vartotojų supažindinimo srautų ir patrauklių pasakojimų interneto programose.
Pavyzdžiui, įsivaizduokite el. prekybos platformą, pristatančią naują įtaisą. Vietoj statiško vaizdo galėtumėte animuoti įtaisą judantį trajektorija, kuri imituoja jo numatytą naudojimą, dinamiškai ir įsimintinai demonstruojant jo nešiojamumą ar funkcionalumą. Pasaulinėje naujienų svetainėje pasaulio žemėlapis galėtų būti animuotas su naujienų piktogramomis, keliaujančiomis iš anksto nustatytais maršrutais, iliustruojant naujienų pasiekiamumą.
Interpoliacijos supratimas: sklandaus judesio esmė
Iš esmės animacija yra pokytis laikui bėgant. Kai elementas juda trajektorija, jis užima tam tikras pozicijas. Interpoliacija yra tarpinių pozicijų tarp pagrindinių taškų (kadrų) apskaičiavimo procesas, siekiant sukurti nepertraukiamo judėjimo iliuziją. Paprasčiau tariant, jei žinote, kur objektas pradeda ir baigia judėti, interpoliacija padeda išsiaiškinti visas tarpines stoteles.
Animacijos efektyvumas priklauso nuo jos interpoliacijos kokybės. Blogai parinktas ar įdiegtas interpoliavimo algoritmas gali sukelti trūkčiojantį, nenatūralų ar erzinantį judesį, kuris gadina vartotojo patirtį. Priešingai, gerai suderintas algoritmas sukuria nušlifuotą, sklandžią ir estetiškai patrauklią animaciją, kuri atrodo intuityvi ir jautri.
Pagrindinės judėjimo trajektorijos interpoliavimo sąvokos
Norėdami suprasti algoritmus, turime suvokti keletą pagrindinių sąvokų:
- Trajektorijos apibrėžimas: judėjimo trajektorija remiasi SVG trajektorijos duomenimis. Šios trajektorijos yra apibrėžtos komandų seka (pvz., M – „moveto“, L – „lineto“, C – kubinė Bezjė kreivė, Q – kvadratinė Bezjė kreivė ir A – elipsinis lankas). SVG trajektorijos sudėtingumas tiesiogiai įtakoja reikalingos interpoliacijos sudėtingumą.
- Pagrindiniai kadrai (Keyframes): animacijos paprastai apibrėžiamos pagrindiniais kadrais, kurie nurodo elemento būseną tam tikru laiko momentu. Judėjimo trajektorijos atveju šie pagrindiniai kadrai apibrėžia elemento padėtį ir orientaciją trajektorijoje.
- Lėtėjimo funkcijos (Easing Functions): šios funkcijos kontroliuoja animacijos pokyčio greitį laikui bėgant. Įprastos lėtėjimo funkcijos apima tiesinę (pastovus greitis), „ease-in“ (lėta pradžia, greita pabaiga), „ease-out“ (greita pradžia, lėta pabaiga) ir „ease-in-out“ (lėta pradžia ir pabaiga, greitas vidurys). Lėtėjimas yra labai svarbus, kad animacijos atrodytų natūralios ir organiškos, imituojančios realaus pasaulio fiziką.
- Parametrizavimas: trajektorija iš esmės yra kreivė erdvėje. Norėdami animuoti judėjimą ja, mums reikia būdo, kaip pavaizduoti bet kurį kreivės tašką vienu parametru, paprastai reikšme nuo 0 iki 1 (arba nuo 0% iki 100%), kuri atspindi progresą trajektorijoje.
CSS judėjimo trajektorijos interpoliavimo algoritmas: gilesnė analizė
CSS judėjimo trajektorijos specifikacija nenurodo vieno, monolitinio interpoliavimo algoritmo. Vietoj to, ji remiasi pagrindinio atvaizdavimo variklio interpretacija ir įgyvendinimu, kuris dažnai naudoja SVG animacijos ir pagrindinių naršyklės technologijų galimybes. Pagrindinis tikslas yra tiksliai nustatyti elemento padėtį ir orientaciją bet kuriuo laiko momentu nurodytoje trajektorijoje, atsižvelgiant į apibrėžtus pagrindinius kadrus ir lėtėjimo funkcijas.
Aukštesniu lygiu procesą galima suskirstyti į šiuos etapus:
- Trajektorijos analizė (Parsing): SVG trajektorijos duomenys yra analizuojami ir paverčiami naudojama matematine reprezentacija. Tai dažnai apima sudėtingų trajektorijų skaidymą į paprastesnius segmentus (linijas, kreives, lankus).
- Trajektorijos ilgio apskaičiavimas: norint užtikrinti pastovų greitį ir tinkamą lėtėjimą, dažnai apskaičiuojamas bendras trajektorijos ilgis. Tai gali būti netriviali užduotis sudėtingoms Bezjė kreivėms ir lankams.
- Trajektorijos parametrizavimas: reikalinga funkcija, kuri normalizuotą progreso reikšmę (nuo 0 iki 1) susietų su atitinkamu tašku trajektorijoje ir jo liestine (kuri lemia orientaciją).
- Pagrindinių kadrų įvertinimas: bet kuriuo animacijos laiko momentu naršyklė nustato dabartinį progresą laiko juostoje ir pritaiko atitinkamą lėtėjimo funkciją.
- Interpoliacija trajektorijoje: naudojant sulėtintą progreso reikšmę, algoritmas suranda atitinkamą tašką parametrizuotoje trajektorijoje. Tai apima x, y koordinačių apskaičiavimą.
- Orientacijos apskaičiavimas: liestinės vektorius apskaičiuotame taške trajektorijoje naudojamas elemento pasukimui nustatyti.
Įprasti algoritminiai metodai ir iššūkiai
Nors CSS specifikacija suteikia pagrindą, faktinis šių žingsnių įgyvendinimas apima įvairias algoritmines strategijas, kurių kiekviena turi savo stipriąsias ir silpnąsias puses:
1. Tiesinė interpoliacija (tiesioms trajektorijoms)
Paprastiems linijos segmentams interpoliacija yra tiesmuka. Jei turite du taškus, P1=(x1, y1) ir P2=(x2, y2), ir progreso reikšmę 't' (nuo 0 iki 1), bet kuris taškas P linijos segmente apskaičiuojamas taip:
P = P1 + t * (P2 - P1)
Kas išsiskleidžia į:
x = x1 + t * (x2 - x1)
y = y1 + t * (y2 - y1)
Iššūkis: tai tinka tik tiesioms linijoms. Realios trajektorijos dažnai yra lenktos.
2. Bezjė kreivės interpoliacija
SVG trajektorijos dažnai naudoja Bezjė kreives (kvadratines ir kubines). Interpoliuojant Bezjė kreivę, naudojama kreivės matematinė formulė:
Kvadratinė Bezjė kreivė: B(t) = (1-t)²P₀ + 2(1-t)tP₁ + t²P₂
Kubinė Bezjė kreivė: B(t) = (1-t)³P₀ + 3(1-t)²tP₁ + 3(1-t)t²P₂ + t³P₃
Čia P₀, P₁, P₂ ir P₃ yra kontroliniai taškai.
Iššūkis: tiesiogiai įvertinti Bezjė kreivę tam tikram 't' yra paprasta. Tačiau pasiekti vienodą greitį judant Bezjė kreive yra skaičiavimo požiūriu brangu. Tiesinis 't' progresas kreivėje nesukelia tiesinio nueito atstumo progreso. Norint pasiekti vienodą greitį, paprastai reikia:
- Suskirstymas: padalinti kreivę į daugybę mažų, apytiksliai tiesių segmentų ir tiesiškai interpoliuoti tarp šių segmentų vidurio taškų. Kuo daugiau segmentų, tuo sklandesnis ir tikslesnis judesys, bet didesnėmis skaičiavimo sąnaudomis.
- Šaknų radimas / atvirkštinis parametrizavimas: tai matematiškai griežtesnis, bet sudėtingesnis metodas, siekiant rasti 't' reikšmę, atitinkančią konkretų lanko ilgį.
Naršyklės dažnai naudoja suskirstymo ir aproksimavimo metodų derinį, siekdamos suderinti tikslumą ir našumą.
3. Lanko interpoliacija
Elipsiniams lankams taip pat reikalinga specifinė interpoliavimo logika. Matematika apima elipsės centro, pradžios ir pabaigos kampų apskaičiavimą bei interpoliavimą tarp šių kampų. SVG specifikacija lankams yra gana išsami ir apima kraštutinių atvejų, tokių kaip nuliniai spinduliai ar per toli vienas nuo kito esantys taškai, tvarkymą.
Iššūkis: užtikrinti, kad lanko trajektorija būtų teisingai sekama ir kad būtų išlaikyta teisinga kryptis (sweep-flag), ypač pereinant tarp segmentų.
4. Liestinės ir orientacijos apskaičiavimas
Kad elementas būtų atsuktas judėjimo kryptimi, reikia apskaičiuoti jo pasukimą. Tai paprastai daroma surandant liestinės vektorių interpoliuotame taške trajektorijoje. Šio liestinės vektoriaus kampas suteikia reikiamą pasukimą.
Bezjė kreivei B(t) liestinė yra jos išvestinė B'(t).
Iššūkis: liestinė tam tikruose taškuose (pvz., smaigaliuose) gali būti lygi nuliui, dėl ko pasukimas tampa neapibrėžtas ar nestabilus. Svarbu šiuos atvejus tvarkyti sklandžiai, kad animacija būtų vientisa.
Naršyklių įgyvendinimai ir suderinamumas tarp naršyklių
Interneto standartų grožis yra tai, kad jie siekia sąveikumo. Tačiau sudėtingų algoritmų, tokių kaip judėjimo trajektorijos interpoliacija, įgyvendinimas gali šiek tiek skirtis tarp naršyklių („Chrome“, „Firefox“, „Safari“, „Edge“ ir kt.). Tai gali sukelti subtilius animacijos sklandumo, greičio ar elgsenos skirtumus, ypač esant labai sudėtingoms trajektorijoms ar sudėtingoms laiko funkcijoms.
Strategijos pasauliniams kūrėjams:
- Kruopštus testavimas: visada testuokite savo judėjimo trajektorijos animacijas visose tikslinėse naršyklėse, kurias naudoja jūsų pasaulinė auditorija. Atsižvelkite į skirtingų įrenginių ir operacinių sistemų paplitimą įvairiuose regionuose.
- Naudokite SVG animaciją (SMIL) kaip atsarginį variantą / alternatyvą: nors CSS judėjimo trajektorija yra galinga, kai kurioms sudėtingoms animacijoms arba kai būtinas griežtas suderinamumas tarp naršyklių, senesnė, bet gerai palaikoma sinchronizuotos multimedijos integravimo kalba (SMIL) SVG viduje gali būti perspektyvi alternatyva ar papildomas įrankis.
- Supaprastinkite trajektorijas, kai įmanoma: siekdami maksimalaus suderinamumo ir našumo, supaprastinkite savo SVG trajektorijas, kur tai leidžia vizualinis tikslumas. Venkite perteklinių taškų ar pernelyg sudėtingų kreivių, jei pakanka paprastesnių formų.
- Pasinaudokite JavaScript bibliotekomis: bibliotekos, tokios kaip GSAP („GreenSock Animation Platform“), siūlo tvirtas animacijos galimybes, įskaitant sudėtingą trajektorijos animaciją. Jos dažnai pateikia savo optimizuotus interpoliavimo algoritmus, kurie gali išlyginti neatitikimus tarp naršyklių ir suteikti daugiau kontrolės. Pavyzdžiui, GSAP „MotionPathPlugin“ yra žinomas dėl savo našumo ir lankstumo.
Našumo aspektai pasaulinei auditorijai
Kuriant animacijas pasaulinei auditorijai, našumas yra kritinis veiksnys. Vartotojai regionuose su mažiau patikima interneto infrastruktūra arba senesniais / mažesnės galios įrenginiais turės žymiai prastesnę patirtį, jei animacijos bus lėtos arba sukels vartotojo sąsajos užstrigimus.
Optimizavimo technikos:
- Sumažinkite trajektorijos sudėtingumą: kaip minėta, paprastesnes trajektorijas greičiau analizuoti ir interpoliuoti.
- Jei reikia, sumažinkite kadrų dažnį: nors didelis kadrų dažnis yra pageidautinas, kartais animacijos kadrų dažnio sumažinimas (pvz., iki 30 kadrų per sekundę vietoj 60) gali žymiai pagerinti našumą mažiau galingoje aparatinėje įrangoje be drastiško vizualinio pablogėjimo.
- Naudokite aparatinį spartinimą: naršyklės yra optimizuotos naudoti GPU spartinimą CSS animacijoms. Įsitikinkite, kad jūsų animacijos yra sukonfigūruotos pasinaudoti šia galimybe (pvz., animuojant `transform` savybes, o ne `top`, `left`).
- Naudokite „Throttle“ ir „Debounce“: jei animacijas sukelia vartotojo sąveika (pvz., slinkimas ar dydžio keitimas), užtikrinkite, kad šie paleidikliai būtų apriboti („throttled“) arba atidėti („debounced“), kad išvengtumėte perteklinio perpiešimo ir skaičiavimų.
- Apsvarstykite animacijos bibliotekas: kaip minėta, bibliotekos, tokios kaip GSAP, yra labai optimizuotos našumui.
- Progresyvus tobulinimas: pasiūlykite prastesnę, bet veikiančią patirtį vartotojams, kurie gali būti išjungę animacijas arba kuriems našumas yra problema.
Prieinamumas ir judėjimo trajektorija
Animacijos, ypač greitos, sudėtingos ar pasikartojančios, gali kelti prieinamumo iššūkių. Vartotojams, turintiems vestibiuliarinio aparato sutrikimų (judesio ligos), kognityvinių sutrikimų arba besinaudojantiems ekrano skaitytuvais, animacijos gali būti klaidinančios arba neprieinamos.
Geriausios pasaulinio prieinamumo praktikos:
- Gerbkite
prefers-reduced-motion
medijos užklausą: tai yra pagrindinė CSS funkcija. Kūrėjai turėtų nustatyti, ar vartotojas paprašė sumažinti judesį, ir atitinkamai išjungti arba supaprastinti animacijas. Tai labai svarbu pasaulinei auditorijai, kur prieinamumo poreikiai labai skiriasi. - Animacijos turi būti trumpos ir tikslingos: venkite animacijų, kurios kartojasi be galo arba neturi aiškaus tikslo.
- Suteikite valdymo mygtukus: sudėtingoms ar ilgoms animacijoms apsvarstykite galimybę pateikti valdymo mygtukus, leidžiančius jas sustabdyti, paleisti ar paleisti iš naujo.
- Užtikrinkite skaitomumą: įsitikinkite, kad tekstas išlieka skaitomas, o interaktyvūs elementai yra prieinami net tada, kai animacijos yra aktyvios.
- Testuokite su pagalbinėmis technologijomis: nors judėjimo trajektorija pirmiausia veikia vizualinį atvaizdavimą, įsitikinkite, kad pagrindinis turinys ir funkcionalumas yra prieinami, kai animacijos veikia arba yra išjungtos.
Pavyzdys: produkto pristatymui naudojant judėjimo trajektoriją, jei vartotojas yra įjungęs prefers-reduced-motion
, vietoj produkto animavimo sudėtinga trajektorija, galite tiesiog rodyti statinių vaizdų seriją su aiškiais tekstiniais paaiškinimais, galbūt su subtiliais perėjimais tarp jų.
Judėjimo trajektorijos animacijų internacionalizavimas ir lokalizavimas
Kuriant pasaulinei auditorijai, apsvarstykite, kaip jūsų animacijos gali sąveikauti su lokalizuotu turiniu ar skirtingais kultūriniais lūkesčiais.
- Teksto skaitomumas: jei animacija animuoja tekstą trajektorija, įsitikinkite, kad lokalizuotas tekstas (kurio ilgis ir kryptis gali labai skirtis) vis dar telpa trajektorijoje ir išlieka įskaitomas. Teksto kryptis (iš kairės į dešinę, iš dešinės į kairę) yra ypač svarbi.
- Kultūrinė simbolika: atkreipkite dėmesį į bet kokias simbolines reikšmes, susijusias su judesiu ar formomis skirtingose kultūrose. Tai, kas vienoje kultūroje gali būti sklandi, elegantiška trajektorija, kitur gali būti suvokiama kitaip.
- Tempas ir laikas: apsvarstykite, kad suvokiamas tempas gali skirtis įvairiose kultūrose. Įsitikinkite, kad animacijos greitis ir trukmė yra patogūs ir veiksmingi plačiajai auditorijai.
- Laiko juostos ir realaus laiko duomenys: jei jūsų animacija rodo laiko atžvilgiu jautrią informaciją arba reaguoja į realaus pasaulio įvykius (pvz., skrydžių maršrutus žemėlapyje), užtikrinkite, kad jūsų sistema teisingai tvarkytų skirtingas laiko juostas ir duomenų atnaujinimus vartotojams visame pasaulyje.
Praktinis pavyzdys: palydovo orbitos animavimas
Pailiustruokime praktiniu pavyzdžiu: palydovo, skriejančio aplink planetą, animavimas. Tai yra įprastas vartotojo sąsajos šablonas palydovinėms nuotraukoms ar būsenai rodyti.
1. Apibrėžkite trajektoriją
Orbitai pavaizduoti galime naudoti SVG apskritimą arba elipsinę trajektoriją.
Naudojant SVG elipsę:
<svg width="400" height="400" viewBox="0 0 400 400"> <!-- Planet --> <circle cx="200" cy="200" r="50" fill="blue" /> <!-- Orbit Path (Invisible) --> <path id="orbitPath" d="M 200 100 A 100 100 0 1 1 200 300 A 100 100 0 1 1 200 100" fill="none" stroke="transparent" /> </svg>
`d` atributas apibrėžia elipsinę trajektoriją, kuri sudaro 100 spindulio apskritimą, centruotą ties (200, 200). `A` komanda naudojama elipsiniams lankams.
2. Apibrėžkite animuojamą elementą
Tai būtų mūsų palydovas, galbūt mažas SVG paveikslėlis arba `div` su fonu.
<svg width="400" height="400" viewBox="0 0 400 400"> <!-- Planet --> <circle cx="200" cy="200" r="50" fill="blue" /> <!-- Orbit Path --> <path id="orbitPath" d="M 200 100 A 100 100 0 1 1 200 300 A 100 100 0 1 1 200 100" fill="none" stroke="transparent" /> <!-- Satellite --> <image id="satellite" href="satellite.png" width="20" height="20" /> </svg>
3. Pritaikykite CSS judėjimo trajektoriją
Siejame palydovą su trajektorija ir nustatome animaciją.
#satellite { animation: orbit 10s linear infinite; transform-origin: 50% 50%; /* Important for rotation */ } @keyframes orbit { to { offset-distance: 100%; /* Animate along the path */ offset-rotate: auto; /* Rotate to follow the path tangent */ } } #orbitPath { offset-path: url(#orbitPath); }
Paaiškinimas:
animation: orbit 10s linear infinite;
: pritaiko animaciją pavadinimu „orbit“, kuri trunka 10 sekundžių, veikia pastoviu greičiu (linear) ir kartojasi amžinai.offset-distance: 100%;
`@keyframes` taisyklėje: tai yra judėjimo trajektorijos animacijos esmė šiuolaikiniame CSS. Ji nurodo elementui judėti 100% viso apibrėžtos poslinkio trajektorijos ilgio.offset-rotate: auto;
: nurodo naršyklei automatiškai pasukti elementą, kad jis atitiktų trajektorijos, kuria juda, liestinę. Tai užtikrina, kad palydovas visada būtų nukreiptas savo judėjimo kryptimi.offset-path: url(#orbitPath);
: ši savybė, taikoma animuojamam elementui, susieja jį su apibrėžta trajektorija pagal jos ID.
Pasauliniai aspektai šiam pavyzdžiui:
- Palydovo paveikslėlis (`satellite.png`) turėtų būti optimizuotas įvairioms ekrano raiškoms.
- Planeta ir orbita yra SVG, todėl jos yra keičiamo dydžio ir ryškios visose raiškose.
- Animacija nustatyta kaip `linear` ir `infinite`. Geresnei UX galėtumėte įvesti lėtėjimą arba baigtinę trukmę. Apsvarstykite
prefers-reduced-motion
pateikdami alternatyvų statinį vaizdą arba paprastesnę animaciją.
Judėjimo trajektorijos interpoliavimo ateitis
Interneto animacijos sritis nuolat vystosi. Galime tikėtis:
- Sudėtingesni algoritmai: naršyklės gali įdiegti pažangesnes ir efektyvesnes interpoliavimo technikas Bezjė kreivėms ir kitų sudėtingų trajektorijų tipams, kas leis kurti dar sklandesnes ir našesnes animacijas.
- Didesnė kontrolė: naujos CSS savybės ar plėtiniai gali pasiūlyti smulkesnę interpoliacijos kontrolę, leidžiančią kūrėjams apibrėžti pasirinktinį lėtėjimą trajektorijose ar specifinį elgesį trajektorijų sandūrose.
- Geresni įrankiai: judėjimo trajektorijai populiarėjant, tikimasi patobulintų dizaino įrankių ir animacijos redaktorių, kurie galės eksportuoti su judėjimo trajektorija suderinamus SVG ir CSS.
- Geresnė prieinamumo integracija: gilesnė integracija su prieinamumo funkcijomis, palengvinanti prieinamų alternatyvų animacijoms teikimą.
Išvada
CSS judėjimo trajektorijos interpoliacija yra galingas įrankis kuriant dinamiškas ir įtraukiančias interneto patirtis. Suprasdami pagrindinius algoritmus – nuo paprastos tiesinės interpoliacijos iki Bezjė kreivių ir lankų segmentų sudėtingumo – kūrėjai gali kurti animacijas, kurios yra ne tik vizualiai stulbinančios, bet ir našios bei prieinamos. Pasaulinei auditorijai ypatingas dėmesys suderinamumui tarp naršyklių, našumo optimizavimui, prieinamumui ir internacionalizavimui yra ne tik gera praktika; tai būtina norint suteikti visuotinai teigiamą vartotojo patirtį. Toliau tobulėjant interneto technologijoms, sklandžių, intuityvių ir pasauliniu mastu rezonuojančių animacijų galimybės tik plėsis.
Praktinės įžvalgos:
- Pradėkite nuo paprastų dalykų: pradėkite nuo pagrindinių SVG trajektorijų ir CSS judėjimo trajektorijos savybių.
- Kruopščiai testuokite: patikrinkite savo animacijas skirtinguose įrenginiuose, naršyklėse ir tinklo sąlygomis.
- Teikite pirmenybę prieinamumui: visada įgyvendinkite
prefers-reduced-motion
. - Apsvarstykite bibliotekas: sudėtingiems projektams pasinaudokite pripažintomis animacijos bibliotekomis, tokiomis kaip GSAP, dėl optimizuoto našumo ir funkcijų.
- Sekite naujienas: stebėkite besivystančius interneto animacijos standartus ir naršyklių galimybes.
Įvaldę šias koncepcijas, galite pakelti savo interneto dizainą į aukštesnį lygį ir kurti animacijas, kurios žavi ir džiugina vartotojus visame pasaulyje.