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 insultas-dashoffset 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 atnešti 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 padalinti (), ir konvertuoja rezultatą į naudingą skaičių su parseInt(). 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 klono mazgas () metodas, kuris dubliuoja esamą etiketės šabloną. Kiekviena etiketė pasukama nustatytu intervalu, kurį valdo setTimeout() funkcija. Šis metodas suaktyvina pasukimą po nurodyto uždelsimo, sukuriant sklandų perėjimą tarp etikečių, nereikalaujant vartotojo sąveikos.
Derinys iš insultas-dashoffset 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 JavaScript valdyti animacijas yra jos gebėjimas bendrauti su CSS kintamieji. Š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 requestAnimationFrame 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ą.
Dažnai užduodami klausimai apie „JavaScript“ ir CSS animacijas
- Kaip veikia strokeDashoffset paveikti SVG animacijas?
- The strokeDashoffset kontroliuoja, kiek matoma SVG kelio brūkšnio dalis. Pakeitus jo vertę, galima sklandžiai sukurti pažangą primenančią animaciją.
- Koks yra vaidmuo fetch() realaus laiko animacijose?
- fetch() 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.
- Gali setTimeout() būti naudojamas animacijos intervalams valdyti?
- taip, setTimeout() gali būti naudojamas animacijos vėlavimui įvesti, pvz., intervalais sukant etiketes.
- Koks tikslas parseInt() „JavaScript“ animacijos scenarijuose?
- parseInt() paverčia eilutę (pvz., "42/50") į sveikąjį skaičių, kuris reikalingas skaičiuojant procentus dinaminėse animacijose.
- Kodėl turėčiau naudoti requestAnimationFrame() vietoj setInterval()?
- requestAnimationFrame() yra optimizuotas animacijai, užtikrinant sklandesnius perėjimus sinchronizuojant juos su naršyklės perdažymo ciklu.
Paskutinės mintys apie dinamines pagrindinių kadrų animacijas
Sujungimas JavaScript 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 insultas-dashoffset 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.
Dinaminių animacijų su JavaScript šaltiniai ir nuorodos
- Išsami informacija apie naudojimą insultas-dashoffset SVG animacijas galite rasti adresu MDN žiniatinklio dokumentai: insultas-dashoffset .
- Norėdami gauti daugiau įžvalgų apie dinamines pagrindinio kadro animacijas naudojant JavaScript ir CSS, žr Smashing Magazine: CSS pagrindinių kadrų animacijos .
- Papildomos gairės, kaip valdyti DOM naudojant klono mazgas () JavaScript galima rasti adresu MDN žiniatinklio dokumentai: cloneNode .
- Sužinokite daugiau apie naudojimą atnešti () Norėdami gauti duomenis realiuoju laiku iš MDN žiniatinklio dokumentai: „Fetch“ naudojimas .