Γράψε μια αριθμομηχανή με HTML, JS και CSS

Παρακάτω θα δούμε πως μπορείτε να γράψετε ένα λειτουργικό calculator με λίγες γραμμές (181) κώδικα.

Μπορείτε να δοκιμάσετε την αριθμομηχανή παρακάτω:

Calculator

Ας δούμε τον κώδικα

<h4>Calculator</h4>

<h3 style="text-align: center;"><span style="background-color: #ccffff;">Toy calculator</span></h3>
            <table class="t7_table">
                <tbody>
                    <tr>
                        <td colspan="4"><input id="t7_display" type="text" value="0" disabled=""/></td>
                    </tr>
                    <tr>
                        <td><button id="t7_7">7</button></td>
                        <td><button id="t7_8">8</button></td>
                        <td><button id="t7_9">9</button></td>
                        <td><button id="t7_divide">/</button></td>
                    </tr>
                    <tr>
                        <td><button id="t7_4">4</button></td>
                        <td><button id="t7_5">5</button></td>
                        <td><button id="t7_6">6</button></td>
                        <td><button id="t7_multiply">*</button></td>
                    </tr>
                    <tr>
                        <td><button id="t7_1">1</button></td>
                        <td><button id="t7_2">2</button></td>
                        <td><button id="t7_3">3</button></td>
                        <td><button id="t7_subtract">-</button></td>
                    </tr>
                    <tr>
                        <td><button id="t7_0">0</button></td>
                        <td><button id="t7_decimal">.</button></td>
                        <td><button id="t7_equals">=</button></td>
                        <td><button id="t7_add">+</button></td>
                    </tr>
                    <tr>
                        <td colspan="4"><button id="t7_clear">C</button><span> </span></td>
                    </tr>
                </tbody>
            </table>
            <style>
                .t7_table {
                    border-collapse: collapse;
                    border: 5px ridge whitesmoke;
                    display: flex;
                    flex-direction: column;
                    width: fit-content;
                }

                .t7_table>tbody {
                    border-collapse: collapse;
                    display: flex;
                    flex-direction: column;
                    padding: 5px;
                    /* width: fit-content; */
                }

                /* Buttons */
                .t7_table>*>*>*>* {
                    font-family: monospace;
                    font-size: 10pt;
                }

                /* Display */
                .t7_table>tbody>tr>td>#t7_display {
                    /* width: 50%; */
                    font-family: monospace;
                    font-size: 10pt;
                    text-align: right;
                    width: 110px;
                }

                /* make gap smaller */
                .t7_table>tbody>tr>td {
                    /* width: 0px; */
                    padding: 3px;
                    /* background-color: black; */
                }
            </style>

            <script>
                // get refs to all the buttons in a dict
                const buttons = {};
                for (let i = 0; i < 10; i++) {
                    buttons[i] = document.querySelector(`#t7_${i}`);
                }
                buttons["."] = document.querySelector("#t7_decimal");
                buttons["="] = document.querySelector("#t7_equals");
                buttons["/"] = document.querySelector("#t7_divide");
                buttons["*"] = document.querySelector("#t7_multiply");
                buttons["-"] = document.querySelector("#t7_subtract");
                buttons["+"] = document.querySelector("#t7_add");
                buttons["clear"] = document.querySelector("#t7_clear");

                // get ref to the display
                const display = document.querySelector("#t7_display");

                let buffer = 0;
                let answer_buffer = 0;
                let operator;
                let isFloat = false;

                buttons["clear"].addEventListener("click", () => {
                    buffer = 0;
                    display.value = "0";
                    isFloat = false;
                    answer_buffer = 0;
                    operator = undefined;
                });

                for (let i = 0; i < 10; i++) {
                    buttons[i].addEventListener("click", () => {
                        if (answer_buffer == 0 && operator != undefined) {
                            answer_buffer = buffer
                            buffer = 0;
                            // console.log("here");
                        }
                        if (isFloat) {
                            buffer = parseFloat(buffer.toString() + '.' + i.toString());
                            isFloat = false;
                        } else if (buffer.toString().includes(".")) {
                            buffer = parseFloat(buffer.toString() + i.toString());
                        } else {
                            buffer = parseInt(buffer.toString() + i.toString());
                        }
                        display.value = buffer;
                        // console.log(buffer);
                        // console.log(buffer.isFloat);
                    });
                }

                buttons["."].addEventListener("click", () => {
                    if (buffer.toString().includes(".")) {
                        return;
                    }
                    isFloat = true;
                    buffer = parseFloat(buffer.toString() + ".");
                    display.value = buffer + '.';
                });

                buttons["="].addEventListener("click", () => {
                    if (operator == undefined) {
                        return;
                    }
                    switch (operator) {
                        case "/":
                            buffer = answer_buffer / buffer;
                            break;
                        case "*":
                            buffer = answer_buffer * buffer;
                            break;
                        case "-":
                            buffer = answer_buffer - buffer;
                            break;
                        case "+":
                            buffer = answer_buffer + buffer;
                            break;
                    }
                    display.value = buffer;
                    // answer_buffer = buffer;
                    // buffer = 0;
                    answer_buffer = 0;
                    operator = undefined;
                    isFloat = false;
                });

                const operators = ["+", "-", "*", "/"];
                operators.forEach((op) => {
                    buttons[op].addEventListener("click", () => {
                        if (answer_buffer == 0) {
                            operator = op;
                            answer_buffer = buffer;
                            buffer = 0;
                            display.value = buffer;
                            isFloat = false;
                        } else {
                            // do the calculation and move the answer into the buffer
                            buttons["="].click();
                            // set the operator
                            operator = op;
                        }
                    });
                });

            </script>
        </section>

ή κατεβάστε το αρχείο

iGuRu.gr The Best Technology Site in Greeceggns

Get the best viral stories straight into your inbox!















Shop the Post

Written by giorgos

Ο Γιώργος ακόμα αναρωτιέται τι κάνει εδώ....

Αφήστε μια απάντηση

Η ηλ. διεύθυνση σας δεν δημοσιεύεται. Τα υποχρεωτικά πεδία σημειώνονται με *

Το μήνυμα σας δεν θα δημοσιευτεί εάν:
1. Περιέχει υβριστικά, συκοφαντικά, ρατσιστικά, προσβλητικά ή ανάρμοστα σχόλια.
2. Προκαλεί βλάβη σε ανηλίκους.
3. Παρενοχλεί την ιδιωτική ζωή και τα ατομικά και κοινωνικά δικαιώματα άλλων χρηστών.
4. Διαφημίζει προϊόντα ή υπηρεσίες ή διαδικτυακούς τόπους .
5. Περιέχει προσωπικές πληροφορίες (διεύθυνση, τηλέφωνο κλπ).