Pagrindinių kadrų, pagrįstų dinaminėmis reikšmėmis, animavimas naudojant „JavaScript“.

Stroke-dashoffset

Kaip apskaičiuoti ir animuoti pagrindinių kadrų reikšmes naudojant „JavaScript“.

Kuriant dinamines žiniatinklio programas, derinant „JavaScript“ su CSS animacijomis galima sukurti sklandžius, vizualiai patrauklius perėjimus. Vienas iš dažniausių iššūkių yra elementų animavimas pagal duomenų reikšmes realiuoju laiku. Puikus pavyzdys – sukurti pagrindinio kadro animaciją, atspindinčią dabartinę eigos juostos procentinę dalį, naudojant SVG ir brūkšnio-dashoffset.

Ši technika gali būti ypač naudinga, kai rodote dinamines reikšmes, pvz., prenumeratorių skaičių, kaip šiame pavyzdyje, kur prenumeratų skaičius atnaujinamas realiuoju laiku. Kad animacija veiktų sklandžiai, galime konvertuoti šį skaičių į procentą ir pritaikyti jį tiesiogiai CSS animacijai.

Tačiau „JavaScript“ gali sukelti painiavą, kai kalbama apie CSS animaciją, ypač skaičiuojant reikšmes, pvz., procentus, kad būtų galima efektyviai valdyti pagrindinius kadrus. Šiuo atveju labai svarbu suprasti, kaip išgauti dinaminius duomenis ir jais manipuliuoti naudojant „JavaScript“, kad animacijos atspindėtų teisingą vertę.

Šiame straipsnyje bus paaiškinta, kaip naudoti „JavaScript“ skaitmeniniams duomenims pašalinti, procentais ir pritaikyti juos pagrindiniams kadrams naudojant ypatybę „Street-dashoffset“. Pabaigoje aiškiai suprasite, kaip „JavaScript“ ir CSS gali veikti kartu kuriant interaktyvias animacijas.

komandą Naudojimo pavyzdys
fetch() Metodas fetch() naudojamas norint gauti duomenų iš šaltinio (pvz., tekstinio failo, API). Šiame scenarijuje jis naudojamas norint gauti abonento duomenis iš tekstinio failo, kad būtų galima apdoroti eigos juostoje.
parseInt() Funkcija parseInt() konvertuoja eilutę į sveikąjį skaičių. Čia jis pašalina reikšmę prieš pasvirąjį brūkšnį (pvz., 42/50), kad gautų dabartinį abonentų skaičių.
split() Split() metodas padalija eilutę į masyvą, pagrįstą skyrikliu. Šiuo atveju jis naudoja „/“, kad atskirtų dabartinį prenumeratorių skaičių nuo tikslo (42 nuo 42/50).
strokeDashoffset strokeDashoffset yra SVG atributas, valdantis brūkšnio piešimą. Čia manipuliuojama siekiant dinamiškai pakeisti SVG rato užpildymą pagal prenumeratos procentą.
setTimeout() Šis metodas iškviečia funkciją po nurodyto uždelsimo. Jis naudojamas etikečių pasukimo intervalui nustatyti, leidžiant po kelių sekundžių atsirasti naujoms etiketėms.
cloneNode() CloneNode(true) naudojamas mazgo, įskaitant jo antrinius, kopijas sukurti. Tai būtina norint kopijuoti etiketės šabloną ir dinamiškai pridėti jį prie DOM.
visibility Ši CSS nuosavybė valdoma naudojant „JavaScript“, kad būtų paslėptos arba rodomos etiketės. Tai užtikrina, kad sukimosi metu vienu metu būtų matoma tik viena etiketė.
strokeDasharray strokeDasharray apibrėžia brūkšnių ir tarpų šabloną SVG potėpiuose. Nustatoma tam tikra reikšmė (450), kad atitiktų apskritimo perimetrą, kuris animuojamas su strokeDashoffset.

SVG ratų animavimas naudojant „JavaScript“: nuoseklus vadovas

Šiame pavyzdyje sukūrėme dinaminę animaciją SVG ratui naudodami JavaScript ir CSS derinį. Pagrindinis tikslas – animuoti rato eigą, kad būtų galima vizualiai parodyti prenumeratų skaičių realiuoju laiku. Apskritimas naudoja CSS ypatybė, kuri valdo, kiek apskritimo brūkšnio matoma. „JavaScript“ naudojamas norint gauti ir apskaičiuoti pažangos procentą, o tada taikyti šią reikšmę potėpiui, kad būtų galima sklandžiai animuoti, remiantis realaus laiko duomenimis.

Vienas iš pagrindinių komponentų yra funkcija, kuri nuskaito duomenis iš failo arba serverio, šiuo atveju – prenumeratų skaičių. Scenarijus ištraukia skaitinę duomenų dalį naudodamas manipuliavimo eilutėmis metodus, pvz , ir konvertuoja rezultatą į naudingą skaičių su . Padalinę esamą prenumeratų skaičių iš tikslo, pažangą apskaičiuojame dešimtainiu tikslumu (procentais). Tada šis procentas taikomas insultas-dashoffset sukurti vizualinį efektą.

Antrasis scenarijus tvarko etikečių pasukimą, kuris prideda ekranui dinamiško turinio sluoksnį. Etiketės pridedamos prie DOM naudojant metodas, kuris dubliuoja esamą etiketės šabloną. Kiekviena etiketė pasukama nustatytu intervalu, kurį valdo funkcija. Šis metodas suaktyvina pasukimą po nurodyto uždelsimo, sukuriant sklandų perėjimą tarp etikečių, nereikalaujant vartotojo sąveikos.

Derinys iš apskritimui ir etiketės pasukimo scenarijus sukuria patrauklią vartotojo sąsają. Dinamiškai keisdami apskritimo eigą ir rodomas etiketes, vartotojams suteikiame vaizdinį progreso nurodymą realiuoju laiku. Kodo moduliškumas taip pat užtikrina, kad šias funkcijas būtų galima lengvai pritaikyti kitoms duomenimis pagrįstoms programoms, todėl tai yra lankstus sprendimas kūrėjams, norintiems įdiegti dinaminius vartotojo sąsajos elementus.

SVG eigos juostų animavimas naudojant „JavaScript“ ir CSS pagrindinius kadrus

Šiame sprendime naudojama vanilinė JavaScript ir SVG, skirta dinaminei eigos juostos animacijai. Scenarijus ištraukia reikšmes, apskaičiuoja procentus ir pritaiko jas SVG elemento brūkšnio poslinkiui, kad animacija būtų sklandi.

// HTML and SVG structure
<div id="labels"></div>
<svg width="200" height="200">
<circle id="circle" cx="100" cy="100" r="90" />
</svg>
// JavaScript to animate stroke-dashoffset
let labels = document.getElementById("labels");
const SubGoal = 50; // Total subscription goal
function updateProgress(data) {
  const SubCount = parseInt(data.split('/')[0]); // Extract number
  const SubPercent = SubCount / SubGoal; // Calculate percentage
  const SubPercentStroke = 450 - 450 * SubPercent; // Set stroke offset
  document.getElementById('circle').style.strokeDashoffset = SubPercentStroke;
}
// Example usage
fetch('subscribers.txt').then(response => response.text())
.then(data => updateProgress(data));

Dinaminis etikečių pasukimas naudojant „JavaScript“.

Šis sprendimas dinamiškai sukasi skirtingas etiketes nustatytais intervalais, naudodamas JavaScript. Jis palaiko ir statinius, ir besisukančius ekranus pagal vartotojo nustatymus.

// Label rotation logic
var displaySettings = "RotatingDisplays";
var displayRotationSeconds = 2;
var displayRotationIndex = 0;
function rotateLabelDisplay() {
  if (displayRotationIndex >= labels.children.length) {
    displayRotationIndex = 0;
  }
  for (const label of labels.children) {
    label.style.visibility = 'hidden';
  }
  let label = labels.children[displayRotationIndex];
  label.style.visibility = 'visible';
  displayRotationIndex++;
  setTimeout(rotateLabelDisplay, displayRotationSeconds * 1000);
}
// Trigger rotation if display setting is enabled
if (displaySettings === "RotatingDisplays") {
  rotateLabelDisplay();
} else {
  labels.children[0].style.visibility = "visible";
}

Animacijų tobulinimas naudojant JavaScript ir CSS kintamuosius

Vienas svarbus naudojimo aspektas valdyti animacijas yra jos gebėjimas bendrauti su . Šie kintamieji leidžia kūrėjams sukurti daugiau daugkartinio naudojimo ir lengvai prižiūrimą kodą. Pavyzdžiui, užuot kodinę animacijos reikšmes, pvz., insulto-dashoffset, tiesiogiai į „JavaScript“, galite apibrėžti jas kaip CSS kintamuosius ir manipuliuoti jais naudodami „JavaScript“. Tai suteikia švaresnį būdą valdyti animacijos ypatybes ir daro jūsų kodą moduliškesnį ir keičiamo dydžio.

Kita galinga funkcija derinant JavaScript su CSS yra įvykių klausytojų naudojimas. Įvykiais pagrįstos animacijos gali suaktyvėti atsižvelgiant į naudotojo sąveiką, pvz., mygtuko paspaudimą arba puslapio slinkimą žemyn. Mūsų pavyzdyje galite patobulinti animaciją pridėdami interaktyvumo. Pavyzdžiui, brūkšnelių poslinkis gali būti perskaičiuotas ir dinamiškai taikomas, kai vartotojas užsiprenumeruoja arba atlieka kitą veiksmą. Taip sukuriama labai patraukli ir interaktyvi patirtis, reaguojanti į duomenis realiuoju laiku.

Be to, derinant naudojant pagrindinius kadrus – dar vienas būdas sukurti sklandžią ir efektyvią animaciją. Šis metodas užtikrina, kad animacijos būtų atliekamos per optimalų naršyklės perdažymo ciklą, o tai užtikrina geresnį našumą, palyginti su tradiciniu setInterval arba setTimeout. Ši technika ypač naudinga dirbant su dažnomis animacijomis arba sunkiais „JavaScript“ procesais, kurie kitu atveju gali sulėtinti vartotojo sąsają.

  1. Kaip veikia paveikti SVG animacijas?
  2. The kontroliuoja, kiek matoma SVG kelio brūkšnio dalis. Pakeitus jo vertę, galima sklandžiai sukurti pažangą primenančią animaciją.
  3. Koks yra vaidmuo realaus laiko animacijose?
  4. naudojamas duomenims gauti iš API arba failo. Animacijose tai padeda įkelti dinamines reikšmes, pvz., abonentų skaičių, kurios vėliau gali būti animuojamos ekrane.
  5. Gali būti naudojamas animacijos intervalams valdyti?
  6. taip, gali būti naudojamas animacijos vėlavimui įvesti, pvz., intervalais sukant etiketes.
  7. Koks tikslas „JavaScript“ animacijos scenarijuose?
  8. paverčia eilutę (pvz., "42/50") į sveikąjį skaičių, kuris reikalingas skaičiuojant procentus dinaminėse animacijose.
  9. Kodėl turėčiau naudoti vietoj ?
  10. yra optimizuotas animacijai, užtikrinant sklandesnius perėjimus sinchronizuojant juos su naršyklės perdažymo ciklu.

Sujungimas su CSS leidžia kurti galingas ir dinamiškas animacijas, kurios gali reaguoti į duomenis realiuoju laiku. Suprasdami, kaip apskaičiuoti reikšmes, pvz., procentus, ir pritaikyti jas pagrindinio kadro animacijai, galite sukurti patrauklias ir reaguojančias vartotojo sąsajas, atspindinčias tiesioginę pažangą arba duomenų atnaujinimus.

Naudodami šiame vadove aprašytus metodus galite lengvai valdyti tokias savybes kaip SVG animacijai ir dinamiškai pasukti elementus. Šis derinys yra keičiamo dydžio sprendimas kūrėjams, norintiems integruoti dinamines animacijas į savo projektus su realaus laiko duomenų įvestimis.

  1. Išsami informacija apie naudojimą SVG animacijas galite rasti adresu MDN žiniatinklio dokumentai: insultas-dashoffset .
  2. Norėdami gauti daugiau įžvalgų apie dinamines pagrindinio kadro animacijas naudojant JavaScript ir CSS, žr Smashing Magazine: CSS pagrindinių kadrų animacijos .
  3. Papildomos gairės, kaip valdyti DOM naudojant JavaScript galima rasti adresu MDN žiniatinklio dokumentai: cloneNode .
  4. Sužinokite daugiau apie naudojimą Norėdami gauti duomenis realiuoju laiku iš MDN žiniatinklio dokumentai: „Fetch“ naudojimas .