๐Ÿ“„ Naver Shopping

์ตœ์ค€ํ˜„ยท2022๋…„ 7์›” 29์ผ
0
post-thumbnail
์ œ์ž‘๊ธฐ๊ฐ„ 22.06.26 ~ 22.06.28 (3์ผ ์†Œ์š”)
์‚ฌ์šฉ ์–ธ์–ด html, scss, jquery, json
์‚ฌ์šฉ ํ”Œ๋Ÿฌ๊ทธ์ธ swiper
๋ถ„๋ฅ˜ mobile, ํด๋ก ์ฝ”๋”ฉ


โœ” Json

โ” Json

๐Ÿ’ฌ Json์ด๋ž€, Javascript ๊ฐ์ฒด ๋ฌธ๋ฒ•์„ ๋”ฐ๋ฅด๋Š” ๋ฌธ์ž ๊ธฐ๋ฐ˜์˜ ๋ฐ์ดํ„ฐ ํฌ๋งท์ž…๋‹ˆ๋‹ค. Naver Shopping ํŽ˜์ด์ง€ ํด๋ก ์ฝ”๋”ฉ์€ Json์„ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์ค‘์ ์œผ๋กœ ์ œ์ž‘์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ Json ๊ตฌ์กฐ

๐Ÿ’ฌ JSON ์•ˆ์—๋Š” Javascript์˜ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ธ ๋ฌธ์ž์—ด, ์ˆซ์ž, ๋ฐฐ์—ด, boolean ์™ธ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ ๊ณ„์ธต์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

"liveCalendar": [
  {
    "largeSrc": "https://95choijh.github.io/naverShopping/asset/images/liveCalendar01.png",
    "largeTitle": "๋งŒ๋„ ์• ํ”„ํ„ฐ ๋ธ”๋กœ์šฐ & ๋ธ”๋ž™๋ฐ•์Šค ์„œ๋จธ์œ„ํฌ ๊ธฐ๋… ๋ผ์ด๋ธŒ",
    "date": "6์›” 30์ผ",
    "time": "17:00",
    "desc": "๋ผ์ด๋ธŒ๋ฐฉ์†ก์‹œ ์ตœ๋Œ€55%DC,์‚ฌ์€ํ’ˆ์ฆ์ •",
    "smallSrc": "https://95choijh.github.io/naverShopping/asset/images/liveCalendar_small01.png",
    "smallTitle": "๋งŒ๋„ ์• ํ”„ํ„ฐ ๋ธ”๋กœ์šฐ V3 ์ฐจ๋Ÿ‰ ์—์–ด์ปจ ๋ƒ„์ƒˆ ์Šต๊ธฐ ๊ฑด์กฐ๊ธฐ ์ตœ์‹  ์ œ์กฐ ์ œํ’ˆ",
    "discount": "54%",
    "price": "99,000",
    "mall": "์˜จ๋ผ์ธ ๊ณต์‹ํŒ๋งค์ฒ˜"
  },
  {
    "largeSrc": "https://95choijh.github.io/naverShopping/asset/images/liveCalendar02.png",
    "largeTitle": "๋ฐ•๊ฒฝ๋ฆผ์˜ ์‚ฌ๋Š” ์žฌ๋ฏธ ๋ฒˆ์™ธํŽธ. ์ด๋งˆํŠธ ํŒŒ๋จธ์Šคํ”ฝ ํ€ด์ฆˆ์‡ผ",
    "date": "6์›” 30์ผ",
    "time": "20:00",
    "desc": "๋ฐ•๊ฒฝ๋ฆผ ์ถœ์—ฐ",
    "smallSrc": "https://95choijh.github.io/naverShopping/asset/images/liveCalendar_small02.png",
    "other": "ํ• ์ธ์— ํ• ์ธ์„ ๋”ํ•œ ํŒŒ๊ฒฉํŠน๊ฐ€",
    "smallTitle": "๋ฏฟ๊ณ  ์‚ฌ๋Š” ํŒŒ๋จธ์Šคํ”ฝ ์‹ ์„ ์ œํ’ˆ",
    "mall": "๋ฐ•๊ฒฝ๋ฆผ์˜ ์‚ฌ๋Š” ์ด์•ผ๊ธฐ"
  },
  {
    "largeSrc": "https://95choijh.github.io/naverShopping/asset/images/liveCalendar03.png",
    "largeTitle": "ํ™ˆํŒŒํ‹ฐ ๋ฒ ์ŠคํŠธ ์ตœ๋Œ€ 43%ํ• ์ธ! ํŒŒ๋จธ์Šคํ”ฝ ํ‘ธ๋“œ์Šคํƒ€์ผ๋ง!",
    "date": "7์›” 1์ผ",
    "time": "11:00",
    "smallSrc": "https://95choijh.github.io/naverShopping/asset/images/liveCalendar_small03.jpg",
    "smallTitle": "ํ™ˆํŒŒํ‹ฐ ๋ฒ ์ŠคํŠธ ์ตœ๋Œ€ ~43%",
    "mall": "์ด๋งˆํŠธ๋ชฐ"
  }
],

๐Ÿ’ฌ ์œ„ ์ฝ”๋“œ๋Š” Naver Shopping ํŽ˜์ด์ง€๋ฅผ ์ œ์ž‘ํ•˜๋ฉด์„œ ๋งŒ๋“  Json ํŒŒ์ผ ์˜ ์ผ๋ถ€ ์ค‘ liveCalendar์ž…๋‹ˆ๋‹ค. liveCalendar๋ผ๋Š” ํฐ ํƒ€์ดํ‹€ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ ์•ˆ์— ๋“ค์–ด๊ฐˆ ์ปจํ…์ธ ๋“ค์˜ ๋ฐ์ดํ„ฐ๋“ค์„ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ  ํ•˜๋‚˜์”ฉ ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ fetch ์‚ฌ์šฉ

fetch('https://95choijh.github.io/naverShopping/asset/json/main.json')
.then((response) => {
  return response.json();
})
.then((data) => {})
.catch(function(error){
  console.error("์—๋Ÿฌ");
})

๐Ÿ’ฌ ์ด๋ ‡๊ฒŒ ๋งŒ๋“  json์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์œ„ํ•ด Javascript์—์„œ ์ ‘๊ทผํ•˜๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ด์ฃผ๋Š” fetch๋ฅผ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

fetch('https://95choijh.github.io/naverShopping/asset/json/main.json')

๐Ÿ’ฌ ๊ฐ€์ ธ์˜ค๊ณ ์ž ํ•˜๋Š” ๋ฆฌ์†Œ์Šค์˜ ๊ฒฝ๋กœ๋ฅผ fetch()์— ์ ์–ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

.then((response) => {
  return response.json();
})

๐Ÿ’ฌ ์ด ๋•Œ, fetch์— ๊ฒฝ๋กœ๋กœ API ํ˜ธ์ถœ์— ์„ฑ๊ณตํ–ˆ์„ ๊ฒฝ์šฐ ์‘๋‹ต(response)๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

.catch(function(error){
  console.error("์—๋Ÿฌ");
})

๐Ÿ’ฌ ๋ฐ˜๋Œ€๋กœ, API ํ˜ธ์ถœ์— ์‹คํŒจํ–ˆ์„ ๊ฒฝ์šฐ ์—๋Ÿฌ(error)๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

.then((data) => {})

๐Ÿ’ฌ ์•„๊นŒ ๋งŒ๋“ค์–ด ๋‘” json์„ ๊ธฐ๋ฐ˜์œผ๋กœ data๋ฅผ ๋„ฃ์–ด์ค„ ๊ตฌ๊ฐ„์ž…๋‹ˆ๋‹ค.

.then((data) => {
  data.liveCalendar.forEach(function(el){
    html = ''
    html += `<li>
				<a href="">
					<div class="img-wrap">
						<img src="${el.largeSrc}" alt="${el.largeTitle}">
						<div class="time-box">
							<strong>${el.date}</strong>
							${el.time}
						</div>
					</div>
					<div class="txt-wrap">
						<div class="txtTop-box">
							<strong>${el.largeTitle}</strong>
							<span class="desc">${el.desc}</span>
						</div>
						<div class="small-item">
							<img src="${el.smallSrc}" alt="${el.smallTitle}">
							<div class="smallTxt-wrap">`
    						el.other != null ? html += `<p>${el.other}</p>` : ""
    					html += `<strong>${el.smallTitle}</strong>`
    							el.price != null ? html += `<div class="price-area"><em class="discount">${el.discount}</em><em>${el.price}<span>์›</span></em></div>` : ""
    				html += `</div>
						</div>
						<div class="txtBot-box">
							<span>${el.mall}</span>
						</div>
					</div>
				</a>
			</li>`
    $('.sc-liveCalendar .content-box').append(html);
  })
})

๐Ÿ’ฌ liveCalendar์— ๋“ค์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ ๋ฉ์–ด๋ฆฌ๋“ค์„ forEach๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ ค์ค๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ๊ฐ์˜ ์š”์†Œ๋“ค์„ el๋กœ ์„ ์–ธํ•˜์—ฌ ์ปจํ…์ธ ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ๋˜๋Š” ๋ถ€๋ถ„์„ el.[๋ณ€์ˆ˜]๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์™”์Šต๋‹ˆ๋‹ค. html์— ๋“ค์–ด๊ฐˆ ๋ณ€์ˆ˜์ธ html์— ์•Œ๋งž๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์™€ ์ฝ”๋“œ๋ฅผ ๋„ฃ๊ณ , .append(html)๋กœ ์ตœ์ข…์ ์œผ๋กœ ์™„์„ฑ์„ ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค


๐Ÿ’ฌ ํ•˜์ง€๋งŒ ๋™์ผํ•œ ์ปจํ…์ธ ๋ผ๋„ ๊ฐ ์š”์†Œ์— ๊ณตํ†ต์ ์œผ๋กœ ๋“ค์–ด๊ฐ€์ง€ ์•Š๋Š” ์š”์†Œ๋„ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. liveCalendar๋กœ ์˜ˆ๋ฅผ ๋“ค๋ฉด, el.other์™€ el.price๊ฐ€ ๊ทธ๋Ÿฌํ•œ ๋ถ€๋ถ„์ด์—ˆ๊ณ  ์ด๋Š”, if ์กฐ๊ฑด๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ true, false๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ html ๋ณ€์ˆ˜๋ฅผ ๋‹ค๋ฅด๊ฒŒ ๋ณ€๊ฒฝํ•˜์˜€์Šต๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€