DEV Community

loading...
Cover image for Day 8 of JavaScriptmas - The Rolling Dice Solution

Day 8 of JavaScriptmas - The Rolling Dice Solution

Sekti
Keep moving forward. Learn well not learn fast.
・2 min read

Day 8 - Rolling Dice is the most advanced challenge so far.
Because I need to code the HTML, CSS, and JS.

Each click will give a random number between 1 to 6 just like a dice and the interface also gives different face of dice on each click.

There is the solution
HTML

<div id="first" class="dice first">
            <div class="dot"></div>
        </div>

        <div id="second" class="dice second hide">
            <div class="dot"></div>
            <div class="dot"></div>
        </div>

        <div id="third" class="dice third hide">
            <div class="dot"></div>
            <div class="dot"></div>
            <div class="dot"></div>
        </div>

        <div id="forth" class="dice forth hide">
            <div class="column">
                <div class="dot"></div>
                <div class="dot"></div>
            </div>
            <div class="column">
                <div class="dot"></div>
                <div class="dot"></div>
            </div>
        </div>

        <div id="fifth" class="dice fifth hide">
            <div class="column">
                <div class="dot"></div>
                <div class="dot"></div>
            </div>
            <div class="column">
                <div class="dot"></div>
            </div>
            <div class="column">
                <div class="dot"></div>
                <div class="dot"></div>
            </div>
        </div>

        <div id="sixth" class="dice sixth hide">
            <div class="column">
                <div class="dot"></div>
                <div class="dot"></div>
                <div class="dot"></div>
            </div>
            <div class="column">
                <div class="dot"></div>
                <div class="dot"></div>
                <div class="dot"></div>
            </div>
        </div>
Enter fullscreen mode Exit fullscreen mode

CSS

body {
    background-color: #AEB8FE;
    display: flex;
    flex-direction: column;

    height: 100vh;
}

.dice {
    width: 90px;
    height: 90px;
    border-radius: 10px;
    background-color: #EFE5DC;
    margin: 100px;
    padding: 5px;
}

.dot {
    width: 20px;
    height: 20px;
    border-radius: 15px;
    background-color: black;
}

/* 1st */
.first {
    display: flex;
    justify-content: center;
    align-items: center;
}

/* 2nd */
.second {
    display: flex;
    justify-content: space-between;
}

.second .dot:nth-of-type(2) {
    align-self: flex-end;
}

/* 3rd */
.third {
    display: flex;
    justify-content: space-between; 
}
.third .dot:nth-of-type(2){
    align-self: center;
}

.third .dot:nth-of-type(3){
    align-self: flex-end;    
}

/* 4th, 5th, 6th */
.forth {
    display: flex;
    justify-content: space-between;
}

.fifth {
    display: flex;
    justify-content: space-between;
}

.sixth {
    display: flex;
    justify-content: space-between;
}

.forth .column, .fifth .column, .sixth .column {
    display: flex;
    flex-direction: column;
    justify-content: space-between;        
}

.fifth .column:nth-of-type(2) {
    align-self: center;
}

.hide {
    display: none;
}

.show {
    display: flex;
}
Enter fullscreen mode Exit fullscreen mode

JavaScript

const body = document.body;
const min = 1;
const max = 6;

const first = document.getElementById('first');
const second = document.getElementById('second');
const third = document.getElementById('third');
const forth = document.getElementById('forth');
const fifth = document.getElementById('fifth');
const sixth = document.getElementById('sixth');


body.addEventListener('click', function () {
    let randomNum = Math.floor(Math.random() * max) + min;
    console.log(randomNum);

    // mapping dice faces
    let diceFaces = [
        { id: 1, el: first },
        { id: 2, el: second },
        { id: 3, el: third },
        { id: 4, el: forth },
        { id: 5, el: fifth },
        { id: 6, el: sixth },
    ];

    // show random number with faces
    diceFaces.map(face => {
        if (randomNum === face.id) {
            face.el.classList.add('show');
            face.el.classList.remove('hide');
        } else {
            face.el.classList.add('hide');
            face.el.classList.remove('show');
        }
    });

});
Enter fullscreen mode Exit fullscreen mode

Discussion (3)

Collapse
raddevus profile image
raddevus

This is really cool. I was wishing for a screenshot of what it looked like so I created a codepen for you. It is nice, just click the die and it works.
Have you entered the #dohackathon? It's getting interesting. I completed my entry. if you get a chance check it out and let me know what you think. I like your CSS / GUI design so your input on my app would be great.

Collapse
flyingduck92 profile image
Sekti Author • Edited

Hey man, thanks for the response really appreciate it.
The codepen version already posted in my blog

I don't enter #dohackathon mate. Just checked your app on core-co-doc-ngkxu.ondigitalocean.app/.
The transition is fine. What you need to improve is the white space, alignment, scale of your font.
Since your app is a form. Always put label above the input and the submit button always at the bottom with 100% width.

Your fieldset with aliceblue background actually need more contrast since the text color is #007bff. Try to use webaim.org/resources/contrastchecker/ to pass WCAG Standard.
Also add more additional information on QRCode, Secret id, and Original Secret Id button. Because I don't know what is the function of those button.
Small text / tooltips would be helpful below the input/button

I think thats all man. Hope you like it. Have a good night.

Collapse
raddevus profile image
raddevus

That's some really great insight. Thanks very much for your time and comments. I used Bootstrap so a lot of it (like font and other things) are controlled by bootstrap, but I will take all of these into consideration. Thanks again. Great stuff.