No multivides atkarīgu JavaScript animāciju labošana adaptīvām vietnēm

JavaScript

Izpratne par nosacīto JavaScript animāciju problēmu

Bieži vien, izmantojot adaptīvu tīmekļa dizainu, ir jāiekļauj atšķirīgas darbības dažādiem ierīču veidiem vai ekrāna izmēriem. Šādā situācijā var būt sarežģīti izmantot JavaScript, lai kontrolētu animācijas, kuru pamatā ir multivides vaicājumi. Ja divas animācijas — viena katrai ierīcei — nedarbojas vienlaikus, kā paredzēts, tā ir izplatīta problēma.

Šajā scenārijā tiek izmantotas divas JavaScript animācijas: viena "navigācijas ritināšanai" (piemērota lielākiem ekrāniem) un otra "cta scroll" (aicinājums uz darbību), kas paredzēta mazākām ierīcēm. Grūtības ir nodrošināt, lai katra animācija tiktu atskaņota atsevišķi atkarībā no ekrāna platuma, vienlaikus novēršot sadursmes.

Ja divas animācijas ir iestatītas dažādos skripta tagos un tikai viena no tām darbojas pareizi, rodas problēma. Ja tie tiek ieviesti nevērīgi, to sapludināšana ar vienu nosacījumu vai skripta tagu apvienošana var radīt papildu problēmas, īpaši, ja tiek izmantoti multivides vaicājumi, piemēram, "window.matchMedia()".

Šajā rakstā tiks apskatīts, kā izmantot multivides nosacījumus, lai sakārtotu JavaScript tā, lai katra animācija darbotos kā paredzēts. Lai nodrošinātu netraucētu pāreju starp mobilajiem ekrāniem un lielākiem ekrāniem, tas liks lielu uzsvaru uz atbilstošiem nosacījumu paziņojumiem un multivides vaicājumiem.

Komanda Lietošanas piemērs
window.matchMedia() JavaScript izmanto šo paņēmienu, lai lietotu multivides vaicājumus. Pamatojoties uz ekrāna izmēru, tas nosaka, vai dokuments atbilst norādītajam CSS multivides vaicājumam, un uzsāk attiecīgās JavaScript darbības. Šis skripts ļauj vieglāk atšķirt animācijas lielākiem displejiem no mobilajiem.
addEventListener("change", callback) Šī komanda uzrauga multivides vaicājuma statusa izmaiņas. Funkcija, kas tiek nodrošināta kā atzvanīšana, tiek veikta, ja ekrāna platums pārsniedz iepriekš noteiktu slieksni (piemēram, 450 pikseļi). Tas nodrošina dinamisku reakciju, neprasot lapas atsvaidzināšanu.
removeEventListener("scroll", callback) Novēršot bezjēdzīgu notikumu apstrādi nepareizā ekrāna izmērā, šī komanda optimizē ātrumu, noņemot ritināšanas notikumu uztvērēju, kad tas vairs nav nepieciešams. Mainot plašsaziņas līdzekļu pieprasījumus, tas ir obligāti.
window.pageYOffset Šis atribūts atgriež pikseļu skaitu, kas dokumentā ir ritināti uz augšu un uz leju. To izmanto, lai noteiktu, vai lietotājs ritina uz augšu vai uz leju, un izsekotu ritināšanas pozīciju.
element.style.top Šī komanda pielāgo elementa augšējo CSS rekvizītu, kas kontrolē elementa vertikālo pozīciju lapā. Šeit to izmanto, lai noteiktu, kur lietotāja ritināšanas vietā ir jāparāda vai jāpaslēpta navigācijas josla.
element.style.left Šī komanda pārvieto elementus horizontāli, pielāgojot kreiso CSS rekvizītu, tāpat kā element.style.top. Mobilajās ierīcēs to izmanto, lai ieslēgtu un izslēgtu pogu ar aicinājumu uz darbību.
mediaQuery.matches Šis rekvizīts pārbauda, ​​vai multivides vaicājums un dokuments tagad atbilst. Lai pārliecinātos, ka mobilajās ierīcēs tiek lietota atbilstošā animācija, nevis galddatoros, ir svarīgi nosacīti palaist atbilstošās animācijas, pamatojoties uz ekrāna platumu.
prevScrollpos >prevScrollpos > currentScrollPos Lai noteiktu ritināšanas virzienu (augšup vai lejup), šis nosacījums pārbauda ritināšanas vietas no iepriekšējās un pašreizējās iterācijas. Ir ļoti svarīgi noteikt, kā vienumiem vajadzētu reaģēt uz ritināšanu, piemēram, atklājot vai paslēpjot pogas vai navigācijas joslas.
onscroll Integrēts notikumu apstrādātājs, ko aktivizē lietotājs, ritinot. Salīdzinot iepriekšējās un pašreizējās ritināšanas pozīcijas, tā veic uz ritināšanu balstītas animācijas.

JavaScript animāciju pārvaldība, pamatojoties uz ekrāna izmēru

Iepriekšējie JavaScript skriptu piemēri tika izveidoti, lai risinātu divu dažādu animāciju problēmu — vienu galddatoriem un otru mobilajām ierīcēm. Galvenais izaicinājums ir nodrošināt, lai katra animācija tiktu sākta tikai tad, kad tā ir nepieciešama, atkarībā no ierīces ekrāna platuma. The Lai to paveiktu, tiek izmantota tehnika, kas ļauj kodam identificēt gadījumus, kuros ir izpildīti konkrēti multivides vaicājuma nosacījumi. Skripti nodrošina, ka katra animācija darbojas atsevišķi atkarībā no ekrāna izmēra, izmantojot dažādus nosacījumus darbvirsmai (minimālais platums: 450 pikseļi) un mobilajām ierīcēm (maksimālais platums: 450 pikseļi).

Lielāka ekrāna ritināšanas darbība navigācijas joslai tiek apstrādāta pirmajā skriptā. Atkarībā no ritināšanas virziena, josla paliek redzama vai pazūd, kad lietotājs ritina uz augšu vai uz leju. Izmantojot un mainīgie, tas tiek pārvaldīts, salīdzinot iepriekšējās un pašreizējās ritināšanas pozīcijas. Ritinot uz augšu, navigācijas josla atkal parādās, iestatot tās augšējo pozīciju uz 0, un, ritinot uz leju, tā pazūd, novirzot to no skata ar negatīvu augšējo vērtību.

Otrais skripts attiecas uz pogu “aicinājums uz darbību” (CTA) mobilajās ierīcēs. Visos ekrāna izmēros tiek rādīta CTA poga, taču tā tiek animēta tikai tad, ja ekrāna platums ir mazāks par 450 pikseļiem. Kad lietotājs ritina uz augšu, poga ieslīd no ekrāna kreisās puses; kad tie ritina uz leju, poga pazūd no skata. Ar tādu pašu ritināšanas pozīciju salīdzināšanas loģiku kā navigācijas joslai šī darbība ir salīdzināma. Tomēr tā vietā, lai mainītu augšējo vērtību, tiek mainīta pogas kreisā atrašanās vieta, liekot tai parādīties vai pazust atkarībā no ritināšanas virziena.

Abi skripti ir paredzēti darbam atsevišķi viens no otra. Tomēr tie ir iekapsulēti nosacījuma izteiksmēs, kas pārbauda ekrāna platumu, lai novērstu konfliktus. Ar , multivides vaicājumus var izmantot tieši JavaScript, ļaujot skriptiem dinamiski pārslēgties starp abām animācijām, netraucējot viena otrai. Saglabājot svešas animācijas tiem paredzētajā ekrāna platumā, šī modulārā pieeja uzlabo efektivitāti un garantē netraucētu darbību galddatoros un mobilajās ierīcēs.

Nosacītu animāciju apstrāde, pamatojoties uz multivides vaicājumiem, izmantojot JavaScript

Šis risinājums apstrādā nosacītas animācijas, kas ir atkarīgas no ekrāna platuma, izmantojot JavaScript kopā ar window.matchMedia funkciju.

var prevScrollpos = window.pageYOffset;
var mediaQueryNav = window.matchMedia("(min-width: 450px)");
var mediaQueryCta = window.matchMedia("(max-width: 450px)");

window.onscroll = function() { scrollFunction(); };

function scrollFunction() {
  var currentScrollPos = window.pageYOffset;
  if (mediaQueryNav.matches) {
    // Navigation scroll for larger screens
    if (prevScrollpos > currentScrollPos) {
      document.getElementById("navigation").style.top = "0";
    } else {
      document.getElementById("navigation").style.top = "-90px";
    }
  }
  if (mediaQueryCta.matches) {
    // CTA scroll for mobile screens
    if (prevScrollpos > currentScrollPos) {
      document.getElementById("header-button").style.left = "0.25in";
    } else {
      document.getElementById("header-button").style.left = "-10in";
    }
  }
  prevScrollpos = currentScrollPos;
}

Modulāra pieeja, izmantojot atsevišķus notikumu uztvērējus dažādu izmēru ekrāniem

Šī versija ir efektīvāka un modulārāka, jo katram multivides vaicājumam tiek izmantoti dažādi ritināšanas notikumu klausītāji.

var prevScrollpos = window.pageYOffset;
var mediaQueryNav = window.matchMedia("(min-width: 450px)");
var mediaQueryCta = window.matchMedia("(max-width: 450px)");

mediaQueryNav.addEventListener("change", handleNavScroll);
mediaQueryCta.addEventListener("change", handleCtaScroll);

function handleNavScroll(e) {
  if (e.matches) {
    window.addEventListener("scroll", navScrollFunction);
  } else {
    window.removeEventListener("scroll", navScrollFunction);
  }
}

function handleCtaScroll(e) {
  if (e.matches) {
    window.addEventListener("scroll", ctaScrollFunction);
  } else {
    window.removeEventListener("scroll", ctaScrollFunction);
  }
}

function navScrollFunction() {
  var currentScrollPos = window.pageYOffset;
  if (prevScrollpos > currentScrollPos) {
    document.getElementById("navigation").style.top = "0";
  } else {
    document.getElementById("navigation").style.top = "-90px";
  }
  prevScrollpos = currentScrollPos;
}

function ctaScrollFunction() {
  var currentScrollPos = window.pageYOffset;
  if (prevScrollpos > currentScrollPos) {
    document.getElementById("header-button").style.left = "0.25in";
  } else {
    document.getElementById("header-button").style.left = "-10in";
  }
  prevScrollpos = currentScrollPos;
}

// Initial call to apply the correct event listeners
handleNavScroll(mediaQueryNav);
handleCtaScroll(mediaQueryCta);

Nosacījuma loģikas lietošana vienotam multivides vaicājumu ritināšanas apdarinātājam

Šī metode izmanto vienu ritināšanas notikumu uztvērēju ar nosacījumu pārbaudēm atkarībā no multivides vaicājumiem, lai apstrādātu abas animācijas.

var prevScrollpos = window.pageYOffset;
var mediaQuery = window.matchMedia("(max-width: 450px)");

window.onscroll = function() { scrollHandler(); };

function scrollHandler() {
  var currentScrollPos = window.pageYOffset;
  if (mediaQuery.matches) {
    // CTA scroll for mobile
    if (prevScrollpos > currentScrollPos) {
      document.getElementById("header-button").style.left = "0.25in";
    } else {
      document.getElementById("header-button").style.left = "-10in";
    }
  } else {
    // Navigation scroll for larger screens
    if (prevScrollpos > currentScrollPos) {
      document.getElementById("navigation").style.top = "0";
    } else {
      document.getElementById("navigation").style.top = "-90px";
    }
  }
  prevScrollpos = currentScrollPos;
}

JavaScript optimizēšana adaptīvām animācijām

Adaptīvu vietņu izstrādes būtisks komponents ir nodrošināt, lai pārejas un animācijas reaģētu atšķirīgi dažāda izmēra ierīcēs. Efektīva stāvokļa pārvaldība ir ļoti svarīga, strādājot ar multivides vaicājumiem un JavaScript, jo īpaši, ja animācijas ir paredzētas palaišanai tikai noteikta izmēra ekrānos. Šeit dinamiski notikumu klausītāji un stāties spēlē. Izmantojot šos rīkus, izstrādātāji var nodrošināt, ka animācijas tiek palaistas tikai tad, kad ir izpildīti noteikti kritēriji, tādējādi uzlabojot lietotāja pieredzi un veiktspēju gan galddatoros, gan mobilajās platformās.

Apstrāde ar daudzām animācijām, kas darbojas vienlaikus, rada vēl vienas grūtības JavaScript animācijām, kas ir atkarīgas no multivides. Funkcionalitātes sadalīšana vieglāk pārvaldāmos, modulāros notikumu klausītājos šajā situācijā var radīt brīnumus. Daudz efektīvāk ir atdalīt dažādas funkcijas un aktivizēt tās, pamatojoties uz konkrētiem multivides vaicājumiem, nevis izpildīt visus skriptus vienlaikus. Tas nodrošina, ka katrs skripts attiecīgajā ierīcē darbojas, kā paredzēts, un palīdz ietaupīt nevajadzīgu pārlūkprogrammas slodzi.

Mobilo ierīču veiktspējas optimizācija ir īpaši svarīga, strādājot ar atsaucīgām animācijām. Tā kā mobilajām ierīcēm bieži ir mazāka apstrādes jauda nekā galddatoriem, veiktspēju mobilajās ierīcēs var uzlabot, samazinot skriptu sarežģītību. Šis gadījums, izmantojot notikumu apstrādātājs efektīvi garantē mobilajām ierīcēm paredzētu animāciju, piemēram, “cta scroll”, vienmērīgu darbību, neapliekot ar nodokli ierīces resursus. Turklāt tas garantē, ka lielākās ierīcēs tiek ielādētas animācijas, kas atbilst tikai ekrāna izmēram.

  1. Kā izmantot multivides vaicājumus JavaScript?
  2. JavaScript ļauj lietot multivides vaicājumus ar . Varat izmantot šo veidu, lai palaistu dažādus skriptus atkarībā no ekrāna platuma.
  3. Kā kontrolēt animācijas, pamatojoties uz ekrāna izmēru?
  4. Izmantot lai noteiktu ekrāna platumu, lai vadītu animācijas. Pēc tam pievienojiet vai noņemiet notikumu uztvērējus, ja nepieciešams. Tas garantē, ka atkarībā no ekrāna izmēra tiks atskaņota tikai attiecīgā animācija.
  5. Kāds ir labākais veids, kā optimizēt ritināšanas animācijas?
  6. Samazinot ritināšanas notikuma ietvaros veikto darbību skaitu, var efektīvāk izmantot ritināšanas animācijas optimizācijā. Kad tiek atklāts ritinājums, tikai tad tiek izpildīta nepieciešamā animācijas loģika.
  7. Kā rīkoties ar vairākām animācijām JavaScript?
  8. Vairākas animācijas var pārvaldīt, sadalot tās dažādos apstākļos un notikumu klausītājos. Tas samazina konfliktu iespējamību, jo katra animācija darbojas atsevišķi.
  9. Ko dara un darīt ritināšanas animācijā?
  10. Šie mainīgie uzrauga, kur lietotājs ritina. Iepriekšējā ritināšanas pozīcija tiek saglabāta , un pašreizējā ritināšanas pozīcija tiek saglabāta . Salīdzinot, ir iespējams noteikt, vai lietotājs ritina uz augšu vai uz leju.

Noslēgumā jāsaka, ka responsīvas vietnes izveidei ir nepieciešama JavaScript animāciju pārvaldība dažādām ierīcēm. Izstrādātāji var nodrošināt optimālu lietotāja pieredzi, aktivizējot īpašas animācijas, pamatojoties uz ekrāna platumu, izmantojot tādus rīkus kā, piemēram, .

Ja vietnes tiek ieviestas pareizi, tās var uzlabot savu vizuālo darbību un veiktspēju dažādās ierīcēs. Viens veids, kā to izdarīt, ir selektīvi lietot ritināšanas animācijas un tās izolēt. Šī metode garantē netraucētu pāreju starp darbvirsmas un mobilajām ierīcēm paredzētām animācijām un palīdz novērst skriptu sadursmes.

  1. Šis raksts ir tapis, iedvesmojoties no adaptīva tīmekļa dizaina un JavaScript lietošanas paraugprakses, kas atrodama vietnē Mozilla izstrādātāju tīkls (MDN) . MDN nodrošina padziļinātu dokumentāciju par to, kā efektīvi izmantot un citas multivides vaicājumu metodes JavaScript.
  2. Papildu resursi ritināšanas animāciju optimizēšanai tika apkopoti no CSS triki , piedāvājot ieskatu, kā darbojas un to var pielāgot dažādiem ekrāna izmēriem.
  3. Veiktspējas optimizācijas padomi un stratēģijas JavaScript pārvaldībai dažādās ierīcēs tika iegūti no Smashing Magazine , kurā uzsvērta moduļu skriptu nozīme reaģējošām tīmekļa lietojumprogrammām.