ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

JS

๋ณ„์  UI

choi95 2021. 8. 28. 14:36

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ„์ ์„ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” Rating UI๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•œ๋‹ค.

 

๋ณ„์  Container์™€ ๋งˆ์šฐ์Šค Position ๊ฐ€์ ธ์˜ค๊ธฐ

ํ˜„์žฌ ๋ณ„์  UI๋ฅผ ๋žฉํ•‘ํ•˜๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค๊ฐ€ stars์ธ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ขŒ์ธก์œผ๋กœ ์–ผ๋งˆ๋งŒํผ ๋–จ์–ด์ ธ ์žˆ๋Š”์ง€์™€ ๋งˆ์šฐ์Šค ์ปค์„œ์˜ ํ˜„์žฌ ์œ„์น˜ ๊ฐ’์„ ์•Œ์•„์•ผ์ง€ ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ํ˜„์žฌ ๋งˆ์šฐ์Šค ์ปค์„œ๊ฐ€ ์–ผ๋งˆ๋งŒํผ ์ด๋™ํ–ˆ๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋˜ํ•œ ํ˜„์žฌ ๋งˆ์šฐ์Šค ์ปค์„œ๊ฐ€ ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ์ด๋™ํ•œ ๋น„์œจ์ด ๋ณ„์  0.5์  ๋‹จ์œ„๋กœ ๊ณ„์‚ฐ๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด star ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ๋ณ„์  ๊ฐ€๋กœ ๋„ˆ๋น„/2์˜ ๊ฐ’์„ ํ™•์ธํ•ด์•ผ ๋œ๋‹ค.

MouseEvent ์ธํ„ฐํŽ˜์ด์Šค์˜ clientX ์ฝ๊ธฐ ์ „์šฉ ์†์„ฑ์€ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ viewport ๋‚ด์— ์ˆ˜ํ‰ ์ขŒํ‘œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค(ํŽ˜์ด์ง€ ๋‚ด์˜ ์ขŒํ‘œ์™€๋Š” ๋ฐ˜๋Œ€)
const calculateScore = (e) => {
  const { width, left } = e.currentTarget.getBoundingClientRect();
  const x = e.clientX - left;
  const scale = width / MAX_SCORE / 2;
  const score = Math.floor(x / scale + 1) / 2; //์ตœ์†Œ 0.5๊ฐ’๋งŒํผ ์ ์ˆ˜ ๊ณ„์‚ฐ์ด ๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณ„์‚ฐ ๋œ ๋น„์œจ ๊ฐ’์— 1์„ ๊ฐ€์‚ฐ
  return score;
}

 

๋ณ„์  ์œ„์น˜ ๊ฐ’๋งŒํผ ์ ์ˆ˜ ๊ณ„์‚ฐ

๊ณ„์‚ฐ๋œ ๋งˆ์šฐ์Šค ํฌ์ง€์…˜์˜ ์œ„์น˜๊ฐ’์€ 0.5๋‹จ์œ„๋กœ ์ด๋™ํ•˜๊ณ  ์ด๋ฅผ ํ†ตํ•ด ์ ์ˆ˜๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ณ„์  UI ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉฐ ๊ฐ ์ธ๋ฑ์Šค ๊ฐ’๊ณผ ๋น„๊ตํ•ด์ค€๋‹ค.

const setDisplayScore = (score) => {
  const starList = Array.from($stars.children);
  starList.forEach((star, i) => {
    if(score > i) { //ํ˜„์žฌ ๋งˆ์šฐ์Šค ์œ„์น˜๊ฐ€ ๊ฐ ์ธ๋ฑ์Šค ๊ฐ’๋ณด๋‹ค ํด ๊ฒฝ์šฐ์—๋งŒ ๋ณ„ UI๋ฅผ ์ฑ„์›€
      if(score - i === 0.5) {
        star.className = 'star half';
      } else {
        star.className = 'star full';
      }
    } else {
      star.className = 'star empty';
    }
  })
}

 

๋Œ“๊ธ€
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
TAG
more
ยซ   2025/06   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
๊ธ€ ๋ณด๊ด€ํ•จ