External Exam Download Resources Web Applications Games Recycle Bin

Async Animations

What Is async? "things that dont wait for eachother"

animations.html

<!DOCTYPE html>
<html>
    <head>
        <title>Aniamtions with timeouts</title>
        <link rel="stylesheet" type="text/css" href="animations.css">
    </head>
    <body>
        Distance to cup: <span id="distance"></span>m<br>
        <button onclick="swing();" id="swingbutton">SWING</button><br>
        You swung: <span id="swing"></span>m<br>
        Score: <span id="score">0</span>
        <h3>Club selection:</h3>
        <select id="club">
            <option value="iron">Iron 20-50m range</option>
            <option value="putt">Putter 1-6m range</option>
        </select>
        <br>
        <img id="animations" height=200 width=200>
        <script src="animations.js"></script>
    </body>
</html>

animations.css

body{
    background-color: salmon;
}

animations.js

anim_swing = "https://upload.wikimedia.org/wikipedia/commons/6/6e/Golf_Swing_Animation.gif"
tee_off = "https://www.publicdomainpictures.net/pictures/100000/velka/golfer-teeing-off.jpg"
putting_gif = "https://i.gifer.com/6Tt.gif";
image_element = document.getElementById("animations");
button_element = document.getElementById("swingbutton");
image_element.src = tee_off;

distance = 100;
document.getElementById("distance").innerHTML = distance; 
score = 0;

function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } //sleepy

async function animate(pic) {
    button_element.style.display = "none"; //hide button so no spam
    image_element.src = pic; //change picture temporarily
    await sleep(4000); //4 seconds == 4000ms
    image_element.src = tee_off;  //reset
    button_element.style.display = "block"; //show button again
    if (distance == 0){ button_element.style.display = "none"; } //WINNER! XD
}

function swing(){
    score = score + 1;
    club = document.getElementById("club").value;
    if (club == "iron"){ max=50; min=20; animate(anim_swing);  }
    if (club == "putt"){ max=6; min=1; animate(putting_gif); }
    myswing = Math.floor(Math.random() * (max - min + 1)) + min;
    distance = distance - myswing;
    if (distance < 1){ distance = Math.abs(distance); }
    document.getElementById("swing").innerHTML = myswing;
    document.getElementById("distance").innerHTML = distance;
    document.getElementById("score").innerHTML = score;
}