Keyframes animeren op basis van dynamische waarden met JavaScript

Stroke-dashoffset

Hoe u sleutelframewaarden kunt berekenen en animeren met JavaScript

Bij het bouwen van dynamische webapplicaties kan het combineren van JavaScript met CSS-animaties vloeiende, visueel aantrekkelijke overgangen creëren. Een veel voorkomende uitdaging is het animeren van elementen op basis van realtime gegevenswaarden. Een goed voorbeeld is het maken van keyframe-animaties die het huidige percentage van een voortgangsbalk weerspiegelen met behulp van SVG en stroke-dashoffset.

Deze techniek kan met name handig zijn als u dynamische waarden weergeeft, zoals het aantal abonnees, zoals in dit voorbeeld, waarbij het aantal abonnementen in realtime wordt bijgewerkt. Om de animatie naadloos te laten werken, kunnen we dit getal omzetten in een percentage en dit direct toepassen op de CSS-animatie.

JavaScript kan echter verwarrend zijn bij het omgaan met CSS-animaties, vooral bij het berekenen van waarden zoals percentages om keyframes effectief te manipuleren. In dit geval is het van cruciaal belang om te begrijpen hoe u dynamische gegevens kunt extraheren en manipuleren met JavaScript om ervoor te zorgen dat uw animaties de juiste waarde weergeven.

Dit artikel begeleidt u bij het gebruik van JavaScript om numerieke gegevens te strippen, percentages te berekenen en deze toe te passen op hoofdframes met behulp van de eigenschap stroke-dashoffset. Aan het einde zul je een duidelijk inzicht hebben in hoe JavaScript en CSS kunnen samenwerken om responsieve animaties te maken.

Commando Voorbeeld van gebruik
fetch() De fetch()-methode wordt gebruikt om gegevens op te vragen uit een bron (bijvoorbeeld een tekstbestand, API). In dit script wordt het gebruikt om abonneegegevens uit een tekstbestand op te halen voor verwerking in de voortgangsbalk.
parseInt() De functie parseInt() converteert een tekenreeks naar een geheel getal. Hier verwijdert het de waarde vóór de schuine streep (bijvoorbeeld 42/50) om het huidige aantal abonnees te krijgen.
split() De methode split() splitst een tekenreeks in een array op basis van een scheidingsteken. In dit geval wordt '/' gebruikt om het huidige aantal abonnees te scheiden van het doel (42 van 42/50).
strokeDashoffset strokeDashoffset is een SVG-attribuut dat bepaalt hoe een streek wordt getekend. Het wordt hier gemanipuleerd om de vulling van de SVG-cirkel dynamisch te wijzigen op basis van het abonnementspercentage.
setTimeout() Deze methode roept een functie aan na een opgegeven vertraging. Hier wordt het interval voor het roteren van de labels ingesteld, zodat na enkele seconden nieuwe labels verschijnen.
cloneNode() cloneNode(true) wordt gebruikt om een ​​kopie van een knooppunt te maken, inclusief de onderliggende knooppunten. Dit is essentieel voor het dupliceren van de labelsjabloon en het dynamisch toevoegen ervan aan de DOM.
visibility Deze CSS-eigenschap wordt beheerd via JavaScript om labels te verbergen of weer te geven. Het zorgt ervoor dat er tijdens het roteren slechts één label tegelijk zichtbaar is.
strokeDasharray strokeDasharray definieert het patroon van streepjes en gaten in een SVG-streek. Het is ingesteld op een specifieke waarde (450) die overeenkomt met de omtrek van de cirkel, die wordt geanimeerd met strokeDashoffset.

SVG-cirkels animeren met JavaScript: een stapsgewijze handleiding

In dit voorbeeld hebben we een dynamische animatie voor een SVG-cirkel gemaakt met behulp van een combinatie van JavaScript en CSS. Het belangrijkste doel is om de voortgang van een cirkel te animeren om het aantal abonnementen in realtime visueel weer te geven. De cirkel maakt gebruik van de CSS-eigenschap, die bepaalt hoeveel van de lijn van de cirkel zichtbaar is. JavaScript wordt gebruikt om het voortgangspercentage op te halen en te berekenen en die waarde vervolgens toe te passen op de streek, waardoor vloeiende animaties mogelijk zijn op basis van realtime gegevens.

Een belangrijk onderdeel is de functie, die gegevens ophaalt uit een bestand of server, in dit geval het aantal abonnementen. Het script extraheert het numerieke deel van de gegevens met behulp van tekenreeksmanipulatiemethoden zoals en converteert het resultaat naar een bruikbaar getal met . Door het huidige aantal abonnementen te delen door het doel, berekenen we de voortgang als decimaal (percentage). Dit percentage wordt vervolgens toegepast op de slag-dashoffset om het visuele effect te creëren.

Het tweede script zorgt voor de labelrotatie, waardoor een laag dynamische inhoud aan de weergave wordt toegevoegd. Labels worden aan de DOM toegevoegd met behulp van de methode, die een bestaande labelsjabloon dupliceert. Elk label wordt met een ingesteld interval geroteerd, dat wordt geregeld door de functie. Deze methode activeert de rotatie na een gespecificeerde vertraging, waardoor een vloeiende overgang tussen labels ontstaat zonder gebruikersinteractie.

De combinatie van voor de cirkel en het labelrotatiescript ontstaat een boeiende gebruikersinterface. Door zowel de voortgang van de cirkel als de weergegeven labels dynamisch te veranderen, geven we gebruikers in realtime een visuele indicatie van de voortgang. De modulariteit van de code zorgt er ook voor dat deze functies eenvoudig kunnen worden aangepast aan andere datagestuurde applicaties, waardoor het een flexibele oplossing is voor ontwikkelaars die dynamische UI-elementen willen implementeren.

SVG-voortgangsbalken animeren met JavaScript en CSS-keyframes

Deze oplossing maakt gebruik van standaard JavaScript en SVG voor front-end dynamische voortgangsbalkanimatie. Het script extraheert waarden, berekent percentages en past deze toe op de stroke-dashoffset van een SVG-element voor vloeiende animaties.

// 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));

Dynamische labelrotatie met JavaScript

Deze oplossing roteert verschillende labels dynamisch op vaste intervallen met behulp van JavaScript. Het ondersteunt zowel statische als roterende weergaven op basis van gebruikersinstellingen.

// 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";
}

Animaties verbeteren met JavaScript- en CSS-variabelen

Een belangrijk aspect van het gebruik animaties besturen is het vermogen om ermee te communiceren . Met deze variabelen kunnen ontwikkelaars meer herbruikbare en gemakkelijk te onderhouden code maken. In plaats van animatiewaarden zoals stroke-dashoffset rechtstreeks in JavaScript in te voeren, kunt u ze bijvoorbeeld definiëren als CSS-variabelen en ze manipuleren met JavaScript. Dit biedt een schonere manier om uw animatie-eigenschappen te beheren en maakt uw code modulair en schaalbaarder.

Een andere krachtige functie bij het combineren van JavaScript met CSS is het gebruik van gebeurtenislisteners. Gebeurtenisgestuurde animaties kunnen worden geactiveerd op basis van gebruikersinteracties, zoals klikken op een knop of naar beneden scrollen op een pagina. In ons voorbeeld kunt u de animatie verbeteren door interactiviteit toe te voegen. De stroke-dashoffset kan bijvoorbeeld opnieuw worden berekend en dynamisch worden toegepast wanneer een gebruiker zich abonneert of een andere actie uitvoert. Dit creëert een zeer boeiende en interactieve ervaring die reageert op realtime gegevens.

Daarnaast combineren met keyframes is een andere manier om vloeiende en efficiënte animaties te maken. Deze methode zorgt ervoor dat animaties worden uitgevoerd tijdens de optimale herschildercyclus van de browser, waardoor betere prestaties worden geleverd in vergelijking met traditionele setInterval of setTimeout. Deze techniek is vooral handig bij frequente animaties of zware JavaScript-processen die anders de gebruikersinterface zouden kunnen vertragen.

  1. Hoe werkt invloed op SVG-animaties?
  2. De bepaalt hoeveel van de lijn van het SVG-pad zichtbaar is. Als u de waarde ervan wijzigt, zijn vloeiende, voortgangsachtige animaties mogelijk.
  3. Wat is de rol van in realtime animaties?
  4. wordt gebruikt om gegevens uit een API of bestand op te halen. In animaties helpt dit bij het laden van dynamische waarden zoals het aantal abonnees, die vervolgens op het scherm kunnen worden geanimeerd.
  5. Kan worden gebruikt om animatie-intervallen te controleren?
  6. Ja, kan worden gebruikt om vertragingen in animaties te introduceren, zoals het met tussenpozen roteren van labels.
  7. Wat is het doel van in JavaScript-animatiescripts?
  8. converteert een tekenreeks (zoals "42/50") naar een geheel getal, wat nodig is voor het berekenen van percentages in dynamische animaties.
  9. Waarom zou ik gebruiken in plaats van ?
  10. is geoptimaliseerd voor animaties en zorgt voor vloeiendere overgangen door ze te synchroniseren met de herschildercyclus van de browser.

Combineren met CSS zorgt voor krachtige en dynamische animaties die kunnen reageren op realtime gegevens. Door te begrijpen hoe u waarden zoals percentages berekent en deze toepast op keyframe-animaties, kunt u boeiende en responsieve gebruikersinterfaces creëren die live voortgang of gegevensupdates weerspiegelen.

Met de technieken die in deze handleiding worden behandeld, kunt u eenvoudig eigenschappen manipuleren, zoals voor SVG-animaties en elementen dynamisch roteren. Deze combinatie biedt een schaalbare oplossing voor ontwikkelaars die dynamische animaties in hun projecten willen integreren met realtime gegevensinvoer.

  1. Gedetailleerde informatie over het gebruik voor SVG-animaties kunt u vinden op MDN-webdocumenten: stroke-dashoffset .
  2. Voor meer inzicht in dynamische keyframe-animaties met behulp van JavaScript en CSS, zie Smashing Magazine: CSS-keyframe-animaties .
  3. Aanvullende richtlijnen voor het manipuleren van de DOM met in JavaScript is beschikbaar op MDN-webdocumenten: cloneNode .
  4. Meer informatie over het gebruik om gegevens in realtime op te halen MDN-webdocumenten: Fetch gebruiken .