상품 수량 계산기

  • 쇼핑몰에 보면 상품 수량 계산하는건 꼭 있다.
  • HTML,CSS,JS로 간단하게 구현이 가능하다.
  • codepen으로도 올려놓았으니 확인해보고 입맛대로 바꿔서 쓰면 되겠다.
  • 상세 코드도 따로 올려놓았으니 확인





See the Pen 상품 가격 계산기 by yoonbitnara (@yoonbitnara) on CodePen.




상세코드

HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="style/style.css">
    <title>상품가격계산</title>
  </head>
<body>
    <div id="wrap">
        <h1>상품 가격 계산</h1>

        <fieldset>
            <div id="goodsPriceArea">
                상품가격
                <span id="goodsPrice">12000</span>
            </div>
            <div id="goodsCntArea">
                <span onclick="fnCntChange('0')">-</span>
                <input type="text" name="goodsCnt" id="goodsCnt" value="1" maxlength="2" onkeyup="fnCalc()">
                <span onclick="fnCntChange('1')">+</span>
            </div>
        </fieldset>

        <div id="resArea">
            총액 : <span id="res">0</span>
        </div>
    </div>
    <!-- div#wrap -->
    <script src="script/script.js"></script>
  </body>
</html>



CSS

* {

    box-sizing: border-box;
}

div#wrap {

    border: 1px solid #000;
    width: 600px;
    padding: 10px 20px;
    margin: 20px auto;
}

#wrap fieldset {
    font-size: 28px;
    display: flex;
    padding-top: 16px;
    user-select: none;
}

#wrap fieldset div {

    margin-right: 60px;
}

#wrap fieldset input {

    width: 60px;
    text-align: center;
    font-size: 25px;
    
}

#wrap fieldset div#goodsCntArea span {

    width: 32px;
    height: 32px;
    text-align: center;
    line-height: 28px;
    font-size: 24px;
    border: 1px solid #000;
    display: inline-block;
    transform: translateY(2px);
    cursor: pointer;
}

#wrap fieldset div#goodsPriceArea::after {

    content: "원"
}

#wrap fieldset div#goodsCntArea span:hover {    

    text-shadow: 0.5px 0.5px rgba(0, 0, 0, 0.616);
    background-color: rgba(0, 0, 0, 0.05);
}

#wrap fieldset div#goodsCntArea span:active {

    border-width: 1.1px;
}

#wrap div#resArea {

    font-size: 30px;
    margin: 30px 0;

}

#wrap div#resArea::after {

    content: "원";
}



JS

function fnCalc() {

    let domInput = document.querySelector('#goodsCnt'); 
    let nowCnt = domInput.value;
    
    if(nowCnt == "") {
        
        return;
    }
    nowCnt = Number(nowCnt.trim()); //공백제거 후 숫자형으로 변환

    if(nowCnt <=1 || nowCnt >= 20) {
        alert("상품수량은 1~20에서 선택하실수있습니다.");
        domInput.value = 1;
        document.querySelector('#res').innerText = 0;
        return;
    }


    // 총액 계산
    
    let goodsPrice = Number(document.querySelector('#goodsPrice').innerText);

    let priceSum = 0;

    priceSum = goodsPrice * nowCnt;

    document.querySelector('#res').innerText = priceSum;
}

function fnCntChange(param) { // 상품수량 변경

    let domInput = document.querySelector('#goodsCnt'); 
    let nowCnt = domInput.value;
    nowCnt = Number(nowCnt.trim()); //공백제거 후 숫자형으로 변환

    let min = 1; // 최소 구매수량

    let max = 20; //최대 구매수량


    if(param == "0") {
        
        if(nowCnt == min) {
            alert("최소 " + min +"개 이상 선택필수 입니다.");
            
        } else {
            
            domInput.value = --nowCnt;
        }
        
    }
    if(param == "1") {
        
        if(nowCnt == max) {
            
            alert("최대 구매수량은 " + max + "20개입니다.");
        } else {
            
            domInput.value = ++nowCnt;
        }
        console.log(param);

    }
    // 총액 계산
    
    let goodsPrice = Number(document.querySelector('#goodsPrice').innerText);

    let priceSum = 0;

    priceSum = goodsPrice * nowCnt;

    document.querySelector('#res').innerText = priceSum;
}



Leave a comment