์ ์๊ธฐ๊ฐ | 22.06.26 ~ 22.06.28 (3์ผ ์์) |
์ฌ์ฉ ์ธ์ด | html, scss, jquery, json |
์ฌ์ฉ ํ๋ฌ๊ทธ์ธ | swiper |
๋ถ๋ฅ | mobile, ํด๋ก ์ฝ๋ฉ |
โ 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
๋ณ์๋ฅผ ๋ค๋ฅด๊ฒ ๋ณ๊ฒฝํ์์ต๋๋ค.