자바스크립트

 

 

 

HTML

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Trust Score Thermometer</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>


    <div class="trust-score-thermometer">
    <div class="thermometer-container">
        <div class="thermometer">
            <span class="label">첫 온도 36.5°</span>
            <div class="track">
                <div class="progress">
                    <div class="mercury"></div>
                </div>                
                <div class="ticks">
                    <span>0°</span><span>25°</span><span>50°</span><span>75°</span><span>100°</span>
                </div>
                <div class="ruler">
                    <div class="tick"></div>
                    <div class="tick"></div>
                    <div class="tick"></div>
                    <div class="tick"></div>
                    <div class="tick"></div>
                    <div class="tick"></div>
                    <div class="tick"></div>
                    <div class="tick"></div>
                    <div class="tick"></div>
                    <div class="tick"></div>
                </div>                                
            </div>
            <div class="temperature-display">
                <span id="temperature">36.5°C</span>
                <span id="face" class="face">????</span>
            </div>
        </div>
  
    </div>

        <div class="controls">
            <button onclick="adjustTrustScore(2)">추천 (+2)</button>
            <button onclick="adjustTrustScore(-1)">비추천 (-1)</button>
            <button onclick="adjustTrustScore(5)">게시글 작성 (+5)</button>
        </div>
    </div>



    <script src="script.js"></script>
</body>
</html>

 

 

style.css

body {
    font-family: Arial, sans-serif;
    text-align: center;
    padding: 50px;
}

.thermometer-container {
    display: flex;
    justify-content: center;
    margin-bottom: 20px;
}

.thermometer-container .thermometer {
    width: 400px;
}

.thermometer-container .label {
    font-size: 14px;
    margin-bottom: 5px;
    display: inline-block;
}

.thermometer-container .track {
    position: relative;
    height: 25px;
    background-color: #e0e0e0;
    border-radius: 10px;
    overflow: hidden;
    margin-bottom: 10px;
}

.thermometer-container .progress {
    width: 100%;
    position: absolute;
    height: 100%;
}

.thermometer-container .mercury {
    height: 100%;
    background-color: #36c;
    width: 36.5%; /* 초기 온도 */
    transition: width 0.5s ease;  
}

.thermometer-container  .ticks {
    display: flex;
    justify-content: space-between;
    margin-top: 5px;
}

.thermometer-container  .ticks span {
    font-size: 12px;
    z-index:1;
    top: 5px;
    position: relative;
}

/* 눈금자 스타일  */
.thermometer-container .ruler {
    position: relative;
    display: flex;
    justify-content: space-between;
}

.thermometer-container .ruler .tick {
    width: 1px;
    height: 10px;
    background-color: #000;
    position: relative;
}

/* 36.5도 눈금 강조 (36.5% 위치) */
.thermometer-container  .ruler::before {
    content: '';
    position: absolute;
    left: 36.5%;
    width: 2px; /* 강조된 눈금 굵기 */
    height: 15px; /* 강조된 눈금 길이 */
    background-color: red; /* 강조된 눈금 색상 */
}



.thermometer-container .temperature-display {
    display: flex;
    justify-content: space-between;
    align-items: center;
    font-size: 24px;
    font-weight: bold;
    margin-top: 10px; /* track 밑으로 이동 */
}

.thermometer-container  .face {
    font-size: 30px;
}

.thermometer-container  .controls {
    margin-top: 20px;
}

.trust-score-thermometer button {
    padding: 10px 20px;
    margin: 5px;
    background-color: #ff9800;
    border: none;
    color: white;
    font-size: 16px;
    cursor: pointer;
}

.trust-score-thermometer button:hover {
    background-color: #e68900;
}

 

 

script.js

let baseTemperature = 36.5;
let trustScore = 0;



function adjustTrustScore(scoreChange) {
    trustScore += scoreChange;
    const newTemperature = baseTemperature + (trustScore * 0.1);
    updateThermometer(newTemperature);
}

function updateThermometer(temp) {
    const mercuryElement = document.querySelector('.mercury');
    const temperatureLabel = document.getElementById('temperature');
    const faceElement = document.getElementById('face');

    // 체온 범위 설정 (0 ~ 100도)
    const minTemp = 0.0;
    const maxTemp = 100.0;

    // 체온이 최소 및 최대값을 넘지 않도록 설정
    const clampedTemp = Math.max(minTemp, Math.min(maxTemp, temp));

    // 온도에 맞는 프로그레스 바의 너비 계산
    const widthPercentage = ((clampedTemp - minTemp) / (maxTemp - minTemp)) * 100;
    mercuryElement.style.width = `${widthPercentage}%`;

    // 온도에 맞는 색상 설정 (8단계 색상)
    let color = '#36c'; // 기본 파란색
    if (clampedTemp >= 87.5) {
        color = '#f44336'; // 빨간색
    } else if (clampedTemp >= 75) {
        color = '#ff5722'; // 진한 주황색
    } else if (clampedTemp >= 62.5) {
        color = '#ff9800'; // 주황색
    } else if (clampedTemp >= 50) {
        color = '#ffeb3b'; // 노란색
    } else if (clampedTemp >= 37.5) {
        color = '#8bc34a'; // 연한 녹색
    } else if (clampedTemp >= 25) {
        color = '#4caf50'; // 녹색
    } else if (clampedTemp >= 12.5) {
        color = '#2196f3'; // 연한 파랑
    }
    mercuryElement.style.backgroundColor = color;
    
    // 표정 설정 (8단계 표정)
    let face = '????'; // 기본 웃는 얼굴
    if (clampedTemp >= 100) {
        face = '????'; // 하트 얼굴
    }else if (clampedTemp >= 87.5) {
        face = '????'; // 시원한 얼굴
    } else if (clampedTemp >= 75) {
        face = '????'; // 활짝 웃는 얼굴
    } else if (clampedTemp >= 62.5) {
        face = '????'; // 환하게 웃는 얼굴
    } else if (clampedTemp >= 50) {
        face = '????'; // 약간 미소
    } else if (clampedTemp >= 36.5) {
        face = '????'; // 무표정
    } else if (clampedTemp >= 30) {
        face = '????'; // 약간 실망한 얼굴
    } else if (clampedTemp >= 25) {
        face = '????'; // 걱정하는 얼굴
    } else if (clampedTemp >= 15) {
        face = '????'; // 불안한 얼굴
    } else if (clampedTemp >= 10) {
        face = '????'; // 불안한 얼굴
    }else if (clampedTemp > 0){
        face = '????‍????'; // 죽을상 얼굴
    }else if (clampedTemp <= 0){
        face = '????'; // 사망
    }
    faceElement.textContent = face;

    // 온도 라벨 업데이트
    temperatureLabel.textContent = `${clampedTemp.toFixed(1)}°C`;
}

 

 

 

 

 

 

 

 

 

 

 

 

about author

PHRASE

Level 60  라이트

감장 강아지로 돼지 만든다 , 비슷한 것으로 대신해서 남을 속이려 한다는 말.

댓글 ( 0)

댓글 남기기

작성