JavaScript 系列五:第3課

── 變數作用域、箭頭函式、ES6 語法

by applelily

HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JavaScript 系列五:第3課 ── 變數作用域、箭頭函式、ES6 語法</title>
    <link rel="stylesheet" href="./03-js_arrow-function.css">
</head>
<body>
    <div class="header header_counter">
        simple counter:
    </div>
    <div class="counter-container">

        <div class="flip-container">
            <div class="flipper">
                <div id="topDigit" class="digit top">0</div>
                <div id="bottomDigit" class="digit bottom">1</div>
            </div>
        </div>
        <button id="plus_btn">+</button>
        <button id="minus_btn">-</button>
    </div>
    <hr>
    <div class="header header_calculato">
        simple calculator:
    </div>
    <div class="calculator_container">

            <input id="num_1" type="text" placeholder="輸入數字..." />
            <input id="num_2" type="text" placeholder="輸入數字..."/>
            <button id = "calculator_btn" class="calculator_btn">加/減/乘/除</button>

    </div>
    

    <script src="./03-js_arrow-function.js"></script>
</body>
</html>

CSS

body {

    background-color: #333;

}
.header{
    font-size: 40px;
}
.counter-container {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 40vh;
    text-align: center;

}

.flip-container {
    perspective: 1000px;
    display: inline-block;
    margin: 20px;
    font-family: 'Courier New', Courier, monospace;
}

.flipper {
    position: relative;
    width: 180px;
    height: 100px;
    overflow: hidden;
}

.digit {
    position: absolute;
    width: 100%;
    height: 100%;
    color: #fff;
    font-size: 80px;
    line-height: 100px;
    text-align: center;
    background-color: #222;
    border-radius: 10px;
    transition: transform 1s, opacity 1s;
}

.flipper.up .digit.top {
    animation: flip-up 1s forwards;
}

.flipper.up .digit.bottom {
    animation: fade-in-up 1s forwards;
}

.flipper.down .digit.top {
    animation: flip-down 1s forwards;
}

.flipper.down .digit.bottom {
    animation: fade-in-down 1s forwards;
}

@keyframes flip-up {
    0% {
        transform: translateY(0);
        opacity: 1;
    }
    100% {
        transform: translateY(-100%);
        opacity: 0;
    }
}

@keyframes fade-in-up {
    0% {
        transform: translateY(100%);
        opacity: 0;
    }
    100% {
        transform: translateY(0);
        opacity: 1;
    }
}

@keyframes flip-down {
    0% {
        transform: translateY(0);
        opacity: 1;
    }
    100% {
        transform: translateY(100%);
        opacity: 0;
    }
}

@keyframes fade-in-down {
    0% {
        transform: translateY(-100%);
        opacity: 0;
    }
    100% {
        transform: translateY(0);
        opacity: 1;
    }
}

button {
    font-size: 24px;
    padding: 10px 20px;
    margin: 10px;
    cursor: pointer;
}


.calculator_container {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 40vh;
    text-align: center;
    font-size: 2rem;
}


input{
    
    max-width: 200px;
    height: 50px;
    font-size: inherit;
 ...

JavaScript

const counter = (() => {
    let count_1 = 0;

   
    const updateDisplay = (direction) => {
        const topDigit = document.getElementById('topDigit');
        const bottomDigit = document.getElementById('bottomDigit');
        const flipper = document.querySelector('.flipper');

        topDigit.textContent = count_1;
        bottomDigit.textContent = count_1;

        flipper.classList.remove('up', 'down');
        flipper.classList.add(direction);

        setTimeout(() => {
            topDigit.textContent = count_1;
            flipper.classList.remove('up', 'down');
        }, 2000); 
        // 这应与动画持续时间一致
    };

    const plus = () => {
        count_1++;
        updateDisplay('up');
    };

    const minus = () => {
        count_1--;
        updateDisplay( 'down');
    };

    return { plus, minus };
})();


const do_calculator = () =>{
    let input_1 = document.querySelector('#num_1').value;
    let input_2 = document.querySelector('#num_2').value;
    let num_1 = parseFloat(input_1);
    let num_2 = parseFloat(input_2);
    let result_plus = num_1 + num_2;
    alert(num_1 + '+' +num_2 + ' = ' + result_plus);
    let result_minus = num_1 - num_2;
    alert(num_1 + '-' +num_2 + ' = ' + result_minus);
    let result_multiply = num_1 * num_2 ;
    alert(num_1 + '×' +num_2 + ' = ' + result_multiply) ;
    let result_div = num_1 / num_2 ;
    alert(num_1 + '÷' +num_2 + ' = ' + result_div) ;
}

const minus_btn = document.querySelector('#minus_btn');
const plus_btn = document.querySelector('#plus_btn');
const calculator_btn = document.querySelector('#calculator_btn');

minus_btn.onclick = counter.minus;
plus_btn.onclick = counter.plus;
calculator_btn.onclick = do_calculator;