i need to make this project for school and i cant figure out how i can make the animation of the progress bars trigger when in viewport. help would very much be appreciated!! i have tried so many things, but im only a first year softwaredevelopment student and i just can’t figure it out
this is my code:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://kit.fontawesome.com/b185104bc3.js" crossorigin="anonymous"></script>
<title>My Portfolio</title>
<link rel="stylesheet" href="style-liselot.css">
<script src= "portfolio-liselot.js"></script>
</head>
<body>
<header>
<img src="foto-liselot.jpg" alt="Liselot Meleiste">
<h1>Liselot Melieste</h1>
<p>Project P2</p>
</header>
<nav>
<ul>
<li><a href="home.html">Home</a></li>
<li>
<a href="#">Portfolio's</s></a>
<ul>
<li><a href="portfolio-jesse.html">Jesse Steunenberg</a></li>
<li><a href="portfolio-liselot.html">Liselot Melieste</a></li>
<li><a href="portfolio-lars.html">Lars Pannekoek</a></li>
<li><a href="portfolio-tim.html">Tim Bos</a></li>
<li><a href="portfolio-redouan.html">Redouan Yaakoubi</a></li>
</ul>
</li>
<li><a href="#OverMij">Over Mij</a></li>
<li><a href="#o&c">Opleidingen, Stages en Curcussen</a></li>
<li><a href="#werkervaring">Werkervaring</a></li>
<li><a href="#vaardigheden">Vaardigheden</a></li>
<li><a href="#competenties">Competenties</a></li>
<li><a href="#schoolprojecten">Schoolprojecten</a></li>
</ul>
</nav>
<section id="OverMij" class="section1">
<h2>Over mij</h2><br>
<p> Mijn naam is Liselot Melieste, geboren op 22 februari 2004 in Beverwijk. </p>
<p> Sinds ik twee jaar oud ben woon ik al in Apeldoorn.</p>
<p> Momenteel volg ik de opleiding Software Developer aan Aventus Apeldoorn, waar ik al een half jaar actief bezig ben.</p>
<p> Naast mijn studie werk ik als keukenhulp in de horeca en ben ik op zoek naar een bijbaan in de ICT-wereld. </p>
<p> Ik beschouw mezelf als leergierig en gemotiveerd, altijd klaar om nieuwe uitdagingen aan te gaan.</p>
<p> In mijn vrije tijd geniet ik van activiteiten zoals haken, gamen, lezen en het omgaan met dieren.</p>
</section>
<section id="o&c" class="section2">
<h2>Opleidingen, stages en Curcussen</h2><br>
<div class="container">
<div class="column">
<h4>MBO Software Development niveau 4</h4>
<p>Aventus, Apeldoorn</p>
<p class="cursive-small">Feb 2023 - heden</p>
</div><br>
<div class="column">
<h4>BHV</h4>
<p>certificaat behaald</p>
<p class="cursive-small">Jun 2022</p>
</div><br>
<div class="column">
<h4>HAVO N&T, N&G</h4>
<p> Koningklijke Scholen Gemeenschap, Apeldoorn</p>
<p class="cursive-small">Sep 2016 - Jul 2021</p>
<p>Diploma behaald</p>
</div><br>
<div class="column">
<h4>Hockey scheidsrechter</h4>
<p>certificaat behaald</p>
<p class="cursive-small">2017</p>
</div>
<div class="column">
<h4>Sport Stage</h4>
<p> Ik heb in mijn 4e jaar van HAVO</p>
<p>voor BSM (bewegen, sport en maatschappij) bij AMHC Apeldoorn.</p>
<p>Ik heb hier twee keer per week training gegeven, voor 10 weken lang.</p>
</div>
</div>
</section>
<section id="werkervaring" class="section2">
<h2>Werkervaring</h2><br><br>
<div class="container">
<div class="column">
<h4>Keukenhulp</h4>
<p>SOAP, Apeldoorn</p>
<p class="cursive-small">Sep 2022 - heden</p><br>
</div>
<div class="column">
<H4>Afwashulp</H4>
<p>De Buren café & Tapas, Apeldoorn</p>
<p class="cursive-small">2019 - 2020</p><br>
</div>
<div class="column">
<h4>Boekenpakkketsamensteller (zomerwerk)</h4>
<p>Leermiddelenfonds KSG en Gymnasuim, Apeldoorn</p>
<p class="cursive-small">Jun 2021 - heden</p><br>
</div>
<div class="column">
<h4>Oppassen buurt kinderen</h4>
<p>Apeldoorn</p>
<p class="cursive-small">2018 - 2020</p><br>
</div>
<div class="column">
<h4>Kassamedewerker supermarkt</h4>
<p>DekaMarkt Imkersplaats, Apeldoorn</p>
<p class="cursive-small">Dec 2022 - Feb 2023</p><br>
</div>
<div class="column">
<h4>Jeugd hockeytrainer</h4>
<p>AMHC, Apeldoorn</p>
<p class="cursive-small">2017 - 2019</p>
</div>
</div>
</section>
<section id="vaardigheden" class="section2">
<h2>Vaardigheden</h2><br>
<div class="container">
<div class="column">
<div class="vaardigheden scroll-animation">
<div class="details">
<span>Databases</span>
</div>
<div class="lijn">
<div id="databases-lijn"></div>
</div>
</div><br>
</div>
<div class="column">
<div class="vaardigheden scroll-animation">
<div class="details">
<span>Webdevelopment</span>
</div>
<div class="lijn">
<div id="webdev-lijn"></div>
</div>
</div><br>
</div>
<div class="column">
<div class="vaardigheden scroll-animation">
<div class="details">
<span>Programmeren</span>
</div>
<div class="lijn">
<div id="programmeren-lijn"></div>
</div>
</div><br>
</div>
<div class="column">
<div class="vaardigheden scroll-animation">
<div class="details">
<span>Office</span>
</div>
<div class="lijn">
<div id="office-lijn"></div>
</div>
</div><br>
</div>
<div class="column">
<div class="vaardigheden scroll-animation">
<div class="details">
<span>Nederlands</span>
</div>
<div class="lijn">
<div id="nl-lijn"></div>
</div>
</div><br>
</div>
<div class="column">
<div class="vaardigheden scroll-animation">
<div class="details">
<span>Engels</span>
</div>
<div class="lijn">
<div id="en-lijn"></div>
</div>
</div><br>
</div>
</div>
</section>
<section id="competenties" class="section2">
<h2>Competenties</h2><br>
<div class="section3">
<p>Ik zie mijzelf als zelfverzekerd, zorgzaam en verandwoordelijk.</p>
<p>Ook ben ik goed in de leiding nemen en in een groep te werken.</p>
<p>Alleen werken is ook geen probleem, ik ben ook heel zelfstandig.</p>
<p>Ik houd van duidelijke communicatie.</p>
<p>creatief zijn en nieuwe dingen bedenken vind ik ook heel leuk.</p>
</div>
</section>
<section id="schoolprojecten" class="section2">
<h2>Schoolprojecten</h2><br>
<p>Ik ben natuurijk al even bezig met deze opleiding en heb al heel wat opdrachten moeten maken.</p>
<p>Hier een paar voorbeelden:</p>
<ul>
<li><a href="#webdev">Webdevelopment</a></li>
<li><a href="#programmeren">Programmeren</a></li>
<li><a href="#keuzendeel">Keuzendeel</a></li><br>
</ul>
<section id="webdev">
<h4>Webdevelopment</h4>
<p>We hebben al 3 periodes webdevelopment en dit is een voorbeeld van wat we hebben geleerd. </p>
<p>Voor deze opdracht moesten we een formulier maken die naam, adres, postcode, woonplaats en e-mail vroeg.</p>
<p>daarnaast moesten we de optie maken of de persoon zich wil aanmelden voor de nieuwsbrief en hoe het verstuurd wordt.</p><br>
<p class="codepen" data-height="600" data-default-tab="html,result" data-slug-hash="vYvQdqb" data-user="squeewy" style="height: 1000px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
<span>See the Pen <a href="https://codepen.io/squeewy/pen/vYvQdqb">
Webdevelopment formulier</a> by squeewy (<a href="https://codepen.io/squeewy">@squeewy</a>)
on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>
</section><br><br><br><br>
<section id="programmeren">
<H4>Programmeren</H4>
<p>Ook programmeren hebben we nu al 3 periodes en hebben we al veel verschillende dingen gemaakt</p>
<p>Een van de dingen die ik het leuks vond om te maken was met Turtle. Dit is tekenen met code.</p>
<video width="640" height="480" controls>
<source src="turtle.circle-liselot.mp4" type="video/mp4">
</video>
<video width="640" height="480" controls>
<source src="turtle.turtle-liselot.mp4" type="video/mp4">
</video>
</section><br><br><br>
<section id="keuzendeel">
<h4>Keuzendeel</h4>
<p>Sinds deze periode heb ik het keuzendeel mobile aplications.</p>
<p>Dit is een best moeilijk keuzendeel voor een eerste jaar maar ik vind de uitdaging heel leuk.</p>
<p>Hier gebruiken we een programma voor genaamd 'epxo', dit kunnen we grbruiken om te zien wat we maken op onze telefoons.</p>
<p>Dit zijn een paar voorbeelden van wat we tot nu toe hebben gemaakt.</p><br><br>
<img src="helloworld-liselot.jpg" alt="hello world">
<img src="secondproject-liselot.jpg" alt="second project">
<img src="SecondProject2-liselot.jpg" alt="second project 2">
</section>
<footer>
<p>Project P3 Portfolio 2023</p>
</footer>
</body>
</html>
css:
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: Arial, sans-serif;
color: #333;
}
.container{
display: flex;
flex-wrap: wrap;
}
.cursive-small {
font-size: smaller;
font-style: italic;
}
.column{
flex: 37%;
padding:10px;
align-items: center;
}
h4, p{
margin:0;
}
h2 {
border-bottom: 5px solid #333;
padding: 1rem;
}
header {
background-image: url('header-liselot.webp');
background-size: cover;
background-position: center;
height: 300px;
color: #333;
text-align: center;
padding: 1rem;
}
header img {
width: 150px;
height: 200px;
margin-bottom: 10px;
}
nav {
background-color: #333;
position: relative;
z-index: 999;
}
nav ul {
list-style: none;
display: flex;
justify-content: center;
background-color: #444;
padding: 0.5rem 0;
}
nav li {
display: inline-block;
margin: 0 1rem;
position: relative;
}
nav a {
text-decoration: none;
color: #fff;
transition: color 0.3s ease;
display: block;
padding: 10px 20px;
}
nav ul ul {
position: absolute;
top: 100%;
display: none;
background-color: #444;
}
nav ul ul li {
display: block;
}
nav li:hover ul {
display: block;
}
nav ul ul li a:hover {
background-color: #555;
}
nav a:hover {
color: #c6cacd;
}
.section1 {
padding: 2rem;
background-color: #fff;
color: #333;
text-align: center;
}
.section2 {
padding: 2rem;
background-color: #fff;
color:#333;
}
.section3 {
padding: 2rem;
background-color: #fff;
color:#333;
}
.details{
width: 100%;
display: flex;
justify-content: space-between;
margin-bottom: 10px;
}
.lijn{
position: relative;
width: 70%;
border: 2px solid #e7c0b4;
border-radius: 20px;
}
.lijn div{
position: relative;
width: 0;
height: 9px;
border-radius: 10px;
background-color: #e7c0b4;
}
.skills:not(:last-child){
margin-bottom: 30px;
}
#databases-lijn {
animation: databases-fill 4s forwards;
}
@keyframes databases-fill {
100% {
width: 20%;
}
}
#webdev-lijn {
animation: webdev-fill 4s forwards;
}
@keyframes webdev-fill {
100% {
width: 40%;
}
}
#programmeren-lijn {
animation: programmeren-fill 4s forwards;
}
@keyframes programmeren-fill {
100% {
width: 20%;
}
}
#office-lijn {
animation: office-fill 4s forwards;
}
@keyframes office-fill {
100% {
width: 70%;
}
}
#nl-lijn {
animation: nl-fill 4s forwards;
}
@keyframes nl-fill {
100% {
width: 100%;
}
}
#en-lijn {
animation: en-fill 4s forwards;
}
@keyframes en-fill {
100% {
width: 80%;
}
}
a {
text-decoration: none;
color: #333;
transition: color 0.3s ease;
display: block;
padding: 10px 20px;
}
ul ul li {
display: block;
}
li:hover ul {
display: block;
}
a:hover {
color: #0d7a9e;
}
video{
padding: 1rem;
}
img{
height: 600px;
width: 300px;
justify-content: center;
position: relative;
margin-inline: 40px;
}
footer {
display: flex;
justify-content: center;
background-color: #444;
color:#fff;
padding: 0.5rem 0;
width: 100%;
}
javascript:
function handleIntersection(entries, observer) {
entries.forEach((entry) => {
if (entry.isIntersecting) {
// Add your animation class to the element
entry.target.classList.add('scroll-animation'); // Change 'animate' to the actual animation class name
// Stop observing this element once it has animated
observer.unobserve(entry.target);
}
});
}
// Define options for the Intersection Observer
const options = {
root: null, // Use the viewport as the root
rootMargin: '0px', // No margin
threshold: 0.5, // 50% of the target element must be in the viewport
};
// Create an Intersection Observer instance
const observer = new IntersectionObserver(handleIntersection, options);
// Observe each element with the 'scroll-animation' class
const animatedElements = document.querySelectorAll('.scroll-animation');
animatedElements.forEach((element) => {
observer.observe(element);
});
the animations work but not the happen before in viewport