Skip to content
/ Gaemin Public
forked from bubobubobo/Gaemin

๐Ÿš› ๋ฐฐ๋‹ฌ์˜ ๋ฏผ์กฑ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ

Notifications You must be signed in to change notification settings

dee0518/Gaemin

ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๊ฐœ๋ฐœ์˜ ๋ฏผ์กฑ(Gaemin)


1. Outline

๊ฐœ๋ฐœ์˜ ๋ฏผ์กฑ์€ ๋ฐฐ๋‹ฌ์˜ ๋ฏผ์กฑ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‹ค. ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ์ž ์ธต์— ๋น„ํ•ด ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ(๋ชจ๋ฐ”์ผ UI)์—์„œ๋งŒ ์ด์šฉ ๊ฐ€๋Šฅํ•œ ์„œ๋น„์Šค๋ฅผ ๋‹ค์–‘ํ•œ ๋””๋ฐ”์ด์Šค์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํƒœ๋ธ”๋ฆฟ๋ถ€ํ„ฐ ํ”ผ์”จ๊นŒ์ง€์˜ ๋ฐ˜์‘ํ˜• ์›น ์„œ๋น„์Šค๋กœ ์ž‘์—…ํ–ˆ๋‹ค. ๋˜ํ•œ ๋ฐฐ๋‹ฌ์˜ ๋ฏผ์กฑ ์•ฑ์€ ๊ฐ€๋กœ ๋ชจ๋“œ๋‚˜ ํ™•๋Œ€ ๋“ฑ์˜ WCAG 2.1 ๊ธฐ์ค€ 1๋ ˆ๋ฒจ ํ•ญ๋ชฉ๋“ค์กฐ์ฐจ ์ง€ํ‚ค์ง€์ง€ ์•Š์•˜๊ณ  ์ด์— ์›น ์ ‘๊ทผ์„ฑ์— ์ดˆ์ ์„ ๋งž์ถ”์–ด ์ง„ํ–‰ํ–ˆ๋‹ค. ์ด 5๋ช…์˜ FE๋กœ ๊ตฌ์„ฑ๋œ ํŒ€ ํ”„๋กœ์ ํŠธ์ด๋ฉฐ ์ด 9๊ฐœ์˜ ํŽ˜์ด์ง€๋ฅผ ์ œ์ž‘ํ–ˆ๋‹ค. ๊ตฌํ˜„๋œ ๊ธฐ๋Šฅ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • Carousel
  • Modal
  • go to top ๋ฒ„ํŠผ
  • tab๊ด€๋ จ ์›น ์ ‘๊ทผ์„ฑ
  • localStorage๋ฅผ ์ด์šฉํ•œ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋ฑƒ์ง€ ํ‘œ์‹œ
  • ๋น„๋””์˜ค ์ปจํŠธ๋กค
  • Map API
  • Skeleton UI
  • ๋งํฌ : https://bubobubobo.github.io/Gaemin/main.html

2. Contribution

  • ๋ผ์ด๋ธŒ ๋น„๋””์˜ค UI ๋ฐ ๊ธฐ๋Šฅ
  • ์‡ผํ•‘ ๋ผ์ด๋ธŒ UI
  • ์ฃผ๋ฌธ ํŽ˜์ด์ง€ UI
  • ์ž‘์—…ํ•œ ์›น ์ ‘๊ทผ์„ฑ
    1. ๋น„๋””์˜ค ์Œ์†Œ๊ฑฐ / ํ•ด์ œ
      • ์–ด๋–ค ๋ฒ„ํŠผ์ธ์ง€, ๋ฒ„ํŠผ์ด ๋ˆŒ๋ ค์ง„ ์—ฌ๋ถ€๋ฅผ ์•Œ๋ ค์ค€๋‹ค.
    2. ํ”„๋กœ๊ทธ๋ž˜์Šค ๋ฐ”
      • ๋น„๋””์˜ค์˜ ์ „์ฒด ์‹œ๊ฐ„๊ณผ ํ˜„์žฌ ์žฌ์ƒ๋˜๊ณ  ์žˆ๋Š” ์‹œ๊ฐ„์„ ์•Œ๋ ค์ค€๋‹ค.
    3. Tabํ‚ค๋กœ ๋น„๋””์˜ค ์ปจํŠธ๋กค focus๋˜๋Š” ๋ถ€๋ถ„์„ ์„ค์ •
      • 3๊ฐœ ๋ฒ„ํŠผ์˜ tab-index๊ฐ€ [-1, 0, -1]๋กœ ์„ค์ •
      • tab-index๊ฐ€ 0์ธ ๊ณณ์— focus๋˜๊ณ  ํ™”์‚ดํ‘œํ‚ค๋ฅผ ์ด์šฉํ•˜์—ฌ -1๋กœ ์ด๋™ํ•˜์—ฌ 0์œผ๋กœ ์„ค์ •
      • ๊ธฐ์กด์˜ [-1, 0, -1]์—์„œ [0, -1, -1]์ด ๋จ
      • ๋‹ค์‹œ Tabํ‚ค๋กœ ์ด๋™ํ–ˆ์„ ๋•Œ focus๋˜๋Š” ๊ฒƒ์€ 1๋ฒˆ์งธ ๋ฒ„ํŠผ์ด ๋จ
  // liveVideo.js ์ค‘ ํ•ด๋‹น WAI-ARIA ๊ด€๋ จ ๋ถ€๋ถ„๋งŒ ๋ฐœ์ทŒ...
  
  // i. ๋น„๋””์˜ค ์Œ์†Œ๊ฑฐ / ํ•ด์ œ
  const setMuted = ({ target }) => {
    // ์–ด๋–ค ๋ฒ„ํŠผ์ธ์ง€ ์•Œ๋ ค์ค€๋‹ค.
    target.setAttribute('aria-label', ariaPressed ? '์Œ์†Œ๊ฑฐ ํ•ด์ œ' : '์Œ์†Œ๊ฑฐ');
    
    // ๋ฒ„ํŠผ์ด ๋ˆŒ๋ ค์žˆ๋Š” ์—ฌ๋ถ€๋ฅผ ์•Œ๋ ค์ค€๋‹ค.
    target.setAttribute('aria-pressed', !ariaPressed);
  };
  
  // ii. ํ”„๋กœ๊ทธ๋ž˜์Šค ๋ฐ”
  const setProgress = (videoDuration, videoCurrentTime) => {
    // ๋น„๋””์˜ค์˜ ์ „์ฒด ์‹œ๊ฐ„๊ณผ ํ˜„์žฌ ์žฌ์ƒ๋˜๊ณ  ์žˆ๋Š” ์‹œ๊ฐ„์„ ์•Œ๋ ค์ค€๋‹ค.
    $progress.setAttribute('aria-valuetext', `${videoDuration}์ดˆ ์ค‘ ${videoCurrentTime}์ดˆ ์žฌ์ƒ ์ค‘`);
  };
  
  // iii. Tabํ‚ค๋กœ ๋น„๋””์˜ค ์ปจํŠธ๋กค focus๋˜๋Š” ๋ถ€๋ถ„์„ ์„ค์ •ํ•ด์ค€๋‹ค.
  const setTabindex = e => {
    if (e.key !== 'ArrowRight' && e.key !== 'ArrowLeft') return;

    const target =
      e.key === 'ArrowRight' ? e.target.parentNode.nextElementSibling : e.target.parentNode.previousElementSibling;

    if (target === null) return;

    e.target.setAttribute('tabindex', -1);
    target.querySelector('button').focus();
    target.querySelector('button').setAttribute('tabindex', 0);
  };

3. Issue & Slove Problem

  1. [liveShopping] ์˜์ƒ x์ถ• ์Šฌ๋ผ์ด๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฒ„๋ฒ…์ด๋Š” ์˜ค๋ฅ˜.
  • ์›์ธ : ๋งˆ์šฐ์Šค ๋“œ๋ž˜๊ทธ ์ด๋ฒคํŠธ ์‹œ์ ์ด ์ž˜๋ชป ์žกํ˜€์žˆ๋‹ค๊ณ  ์ถ”์ธก.
  • ํ•ด๊ฒฐ : ๋๋‚ด ์˜ค๋ฅ˜ ์›์ธ์„ ์ •ํ™•ํžˆ ํŒŒ์•…ํ•˜์ง€ ๋ชปํ•˜์—ฌ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. mouse event์— ๋Œ€ํ•ด์„œ ๋” ๊ณต๋ถ€๋ฅผ ํ•ด๋ณด๋ฉฐ ์›์ธ์„ ํŒŒ์•…ํ•ด์•ผ๊ฒ ๋‹ค.
  1. [liveVideo] ์ž„์˜ ๋ฐ์ดํ„ฐ๋กœ ์ฑ„ํŒ…์ฐฝ ๊ตฌํ˜„ ์ค‘ ํ•ด๋‹น ๋ฐ์ดํ„ฐ์˜ ๊ฐฏ์ˆ˜๋งŒํผ ๋‚˜์˜ค์ง€ ์•Š๋Š” ์˜ค๋ฅ˜.
  • ์›์ธ : ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด๋กœ ๊ตฌ์„ฑํ•˜๋ฉด์„œ ๊ฐ™์€ ํ‚ค์— ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€์ง„ ๋ชฉ๋ก์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ฐ’์ด ๋ฎ์–ด์”Œ์–ด์ง€๋Š” ๊ฐ์ฒด์˜ ์„ฑ์งˆ๋กœ ์ธํ•œ ๋ฌธ์ œ
  • ํ•ด๊ฒฐ : ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฐ์—ด๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ์˜จ์ „ํžˆ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€๋‹ค.
// ๋ณ€๊ฒฝ ์ „
const chats = {
  '๋ฐฐ๋ฏผ123': '๋ง›์žˆ๊ฒ ๋‹ค',
  'pizzang': 'ํ”ผ์ž ๋จน๊ณ  ์‹ถ๋‹ค.',
  'ajdi': '์‚ฌ์ฃ ',
  '๋ฐฐ๋ฏผ123': '๋ง›์žˆ๊ฒŒ ์ž˜๋จน๊ฒ ์Šต๋‹ˆ๋‹ค.' // ์ฒซ๋ฒˆ์งธ๋กœ ์žˆ๋Š” '๋ฐฐ๋ฏผ123'์˜ ๊ฐ’์„ 
};
// ๋ณ€๊ฒฝ ํ›„
const chats = [
    ['๋ฐฐ๋ฏผ123', '๋ง›์žˆ๊ฒ ๋‹ค'],
    ['pizzang', 'ํ”ผ์ž ๋จน๊ณ  ์‹ถ๋‹ค.'],
    ['ajdi', '์‚ฌ์ฃ '],
    ['๋ฐฐ๋ฏผ123', '๋ง›์žˆ๊ฒ ๋‹ค'],
 ];

ํšŒ๊ณ 

ํšŒ๊ณ ๋ก์„ ๋ณด์‹œ๋ ค๋ฉด ์—ฌ๊ธฐ๋ฅผ ํด๋ฆญํ•ด์ฃผ์„ธ์š”:)

About

๐Ÿš› ๋ฐฐ๋‹ฌ์˜ ๋ฏผ์กฑ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 41.7%
  • HTML 28.2%
  • CSS 15.3%
  • SCSS 14.8%