SPOTIFY

JW LOGยท2023๋…„ 4์›” 4์ผ
0

portfolio

๋ชฉ๋ก ๋ณด๊ธฐ
5/6
post-thumbnail

๐Ÿ” Project Overview

์‚ฌ์ดํŠธ๋ช… : ์Šคํฌํ‹ฐํŒŒ์ด ๋ชจ๋ฐ”์ผ
์ž‘์—…๊ธฐ๊ฐ„ : 3์ผ
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ : swiper, jQuery
์œ ํ˜• : ๋ชจ๋ฐ”์ผ, ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ, ๋ฆฌ๋‰ด์–ผ

โœ… Check Point

  • ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ(Data Binding)์ด๋ž€?
  • ๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ ํ†ต์‹ (Asynchrous)
  • Json

๐Ÿ“š Learning Point

  1. json๋ฐ์ดํ„ฐ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ๋ถ„๋ฅ˜ํ•˜์—ฌ ๋„ฃ๊ธฐ
  2. ์‹œ๊ฐ„๊ณ„์‚ฐ์„ ํ†ตํ•ด ํŠน์ •์‹œ๊ฐ„ ์ด๋ฒคํŠธ๋ฐœ์ƒ ์‹œํ‚ค๊ธฐ
  3. ์ปจํ…์ธ  ํด๋ฆญ์‹œ ํ•ด๋‹น ํƒญ์œผ๋กœ ์ด๋™ํ•˜๊ธฐ

๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ(Data Binding)์ด๋ž€?

ํ™”๋ฉด์ƒ์— ๋ณด์—ฌ์ง€๋Š” ๋ฐ์ดํ„ฐ(View)์™€ ๋ธŒ๋ผ์šฐ์ € ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ(Model)๋ฅผ ๋ฌถ์–ด์„œ(Binding) ์„œ๋กœ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด์„œ HTML์—์„œ ์„œ๋ฒ„ ํ˜น์€ ์Šคํฌ๋ฆฝํŠธ์ƒ์—์„œ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ํ™”๋ฉด์ƒ์— ๊ทธ๋ ค์ฃผ๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •์„ ํ–ˆ์„ ๋•Œ, ํ•ด๋‹น ๊ฐ’์ด ๋ณ€๊ฒฝ์ด ๋  ๊ฒฝ์šฐ ๋‹ค์‹œ HTML ์ƒ์— ๋ฐ์ดํ„ฐ(๊ฐ’)๋ฅผ ๋ณ€๊ฒฝ๋œ ๊ฐ’์— ๋”ฐ๋ผ์„œ ๋งž์ถ”์–ด ์ฃผ๋Š” ๋™์ž‘์„ '๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ'์ด๋ผ๊ณ  ํ•œ๋‹ค.

๐Ÿ”น ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ์ข…๋ฅ˜

- ์–‘๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ(2Ways data binding)

์–‘๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์ด๋ž€ ๋ทฐ์™€ ๋ชจ๋ธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
์ฆ‰ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ๊ฐ’์— ๋”ฐ๋ผ js์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ณ , js์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์‚ฌ์šฉ์ž์˜ ํ™”๋ฉด๋„ ๋ณ€๊ฒฝ๋œ๋‹ค.

๋Œ€ํ‘œ์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” AngularJS๊ฐ€ ์žˆ๋‹ค.

  • ์žฅ์  : ์ฝ”๋“œ๋Ÿ‰์„ ํฌ๊ฒŒ ์ค„์—ฌ์ค€๋‹ค
  • ๋‹จ์  : ๋ณ€ํ™”์— ๋”ฐ๋ผ DOM ๊ฐ์ฒด ์ „์ฒด๋ฅผ ๋ Œ๋”๋งํ•ด์ฃผ๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๊ฟ”์ฃผ๋ฏ€๋กœ, ์„ฑ๋Šฅ์ด ๊ฐ์†Œ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

- ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ(1Way data binding)

๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์ด๋ž€ ํ•œ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
js์—์„œ๋Š” ์‚ฌ์šฉ์ž์˜ ํ™”๋ฉด์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์‚ฌ์šฉ์ž๋Š” js์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ์‹œํ‚ค์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€ํ™”๋œ ๊ฐ’์„ ๊ฐ์ง€ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ์‹œ์ผœ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

๋Œ€ํ‘œ์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” React๊ฐ€ ์žˆ๋‹ค.

  • ์žฅ์  : ๋ฐ์ดํ„ฐ ๋ณ€ํ™”์— ๋”ฐ๋ฅธ ์„ฑ๋Šฅ ์ €ํ•˜ ์—†์ด DOM ๊ฐ์ฒด ๊ฐฑ์‹  ๊ฐ€๋Šฅํ•˜๋‹ค.
    ๋˜ํ•œ ๋ฐ์ดํ„ฐ ํ๋ฆ„์ด ๋‹จ๋ฐฉํ–ฅ(๋ถ€๋ชจ->ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ)์ด๋ผ, ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ๋ฐ์ดํ„ฐ ์ถ”์ ๊ณผ ๋””๋ฒ„๊น…์ด ์‰ฝ๋‹ค.

  • ๋‹จ์ : ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ํ™”๋ฉด์„ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.


๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ ํ†ต์‹ (Asynchrous)

๋ฐ์ดํ„ฐ ํ†ต์‹ ์œผ๋กœ โ€˜์š”์ฒญ(Request)โ€™์„ ํ•˜์˜€์„ ๋•Œ, ์–ด๋– ํ•œ ์š”์ฒญ์— ๋Œ€ํ•œ โ€˜์‘๋‹ต(Response)'์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋‹ค์Œ ์ฝ”๋“œ๊ฐ€ ์ˆ˜ํ–‰๋˜๋Š” ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ์˜๋ฏธํ•œ๋‹ค.
์›นํŽ˜์ด์ง€๋ฅผ ๋ฆฌ๋กœ๋“œํ•˜์ง€ ์•Š๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋ฐฉ์‹์ด๋ฉฐ Ajax๋ฅผ ํ†ตํ•ด์„œ ์„œ๋ฒ„์— ์š”์ฒญ์„ ํ•œ ํ›„ ๋ฉˆ์ถ”์–ด ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ทธ ํ”„๋กœ๊ทธ๋žจ์€ ๊ณ„์† ๋Œ์•„๊ฐ„๋‹ค.

  • Ajax : Asynchronous Javascript And Xml(๋น„๋™๊ธฐ์‹ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ xml)
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•ด ์„œ๋ฒ„์™€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ํ†ต์‹  ๊ธฐ๋Šฅ

๐Ÿ”น Ajax์˜ ์žฅ๋‹จ์ 

์žฅ์ 

  • ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๋ฆฌ๋กœ๋“œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์›นํŽ˜์ด์ง€ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.
  • ์„œ๋ฒ„์˜ ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์„œ๋ฒ„์—์„œ Data๋งŒ ์ „์†กํ•˜๋ฉด ๋˜๋ฏ€๋กœ ์ฝ”๋”ฉ์˜ ์–‘์ด ์ค„์–ด๋“ ๋‹ค.

๋‹จ์ 

  • ํžˆ์Šคํ† ๋ฆฌ ๊ด€๋ฆฌ๊ฐ€ ์•ˆ๋œ๋‹ค.
  • ํŽ˜์ด์ง€ ์ด๋™์—†๋Š” ํ†ต์‹ ์œผ๋กœ ์ธํ•œ ๋ณด์•ˆ์ƒ ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.
  • ์—ฐ์†์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๋ฉด ์„œ๋ฒ„ ๋ถ€ํ•˜๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

Json

JavaScript Object Notation
๋น„๋™๊ธฐํ†ต์‹ ์— ์‚ฌ์šฉํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ฐ์ดํ„ฐ ๊ตํ™˜ ํ˜•์‹

๐Ÿ”น ํŠน์ง•

  • ์šฉ๋Ÿ‰์ด ์ ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ ๊ฐ์ฒด๋ฅผ ์†์„ฑ:๊ฐ’์˜ ์Œ ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•œ๋‹ค.
  • ์›น ๋ธŒ๋ผ์šฐ์ €์™€ ์›น ์„œ๋ฒ„ ๊ฐ„ ๋น„๋™๊ธฐ ํ†ต์‹ , ์›น ์„œ๋ฒ„ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๊ตํ™˜, ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ์ „์†ก์‹œ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ปดํ“จํ„ฐ๊ฐ€ ํ†ต์‹ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ๋‹ค๋ฅด๋ฉด ํ†ต์‹ ์ด ๋˜์ง€ ์•Š๊ธฐ๋•Œ๋ฌธ์—, Json์ด๋ผ๋Š” ํ‘œ์ค€ ํฌ๋งท์„ ์‚ฌ์šฉํ•˜์—ฌ ํ†ต์‹ ์„ ์ฃผ๊ณ  ๋ฐ›๋Š”๋‹ค.
  • Javascript ๊ฐ์ฒด์˜ ํ˜•์‹์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๋‹ค.
  • ๋…๋ฆฝํ˜• ์–ธ์–ด์ด๋ฉฐ ํ…์ŠคํŠธ๋กœ ๊ธฐ์ˆ ํ•˜์—ฌ ์‚ฌ๋žŒ๋„ ์‰ฝ๊ฒŒ ์ฝ๊ณ  ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ”น ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ํ˜•์‹

Javascript์˜ object(๊ฐ์ฒด)์™€ ๊ฐ™์ด key(์†์„ฑ)-value(๊ฐ’)๊ฐ€ ๋ฌถ์—ฌ์ง„ ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.

[
	{
		"title": "toystory",
    	"genre": ["animation","comic","kids"],
    	"age": 12
	},
  	{
		"title": "lalaland",
    	"genre": ["romance","musical"],
    	"age": 15
	}
 ]

๐Ÿ“š[LP] 1. json๋ฐ์ดํ„ฐ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ๋ถ„๋ฅ˜ํ•˜์—ฌ ๋„ฃ๊ธฐ

json

{
    "items":[
        {
            "id":"1",
            "sort":"1",
            "snippet":{
                "themeColor":"rgb(225, 51, 0);",
                "thumbnail":"./assets/images/slide_spot_06.png",
                "title":"๊ฐ์„ฑ ์žˆ๋Š” ๋ฐค์€ ์šฐ๋ฆด ์„ค๋ ˆ๊ฒŒ ํ•ด์š”",
                "desc":"#๊ตญ๋‚ด์™ธ #์ƒˆ๋ฒฝ๊ฐ์„ฑ #๊ฐ์„ฑ์ ์ธ"
            }
        },
        {
            "id":"1",
            "sort":"2",
            "snippet":{
                "themeColor":"rgb(245, 155, 35)",
                "thumbnail":"./assets/images/slide_spot_13.png",
                "title":"์˜ค๋Š˜๋„ ๋ฐฉ๊ตฌ์„ ๋‘๋‘ ์นซ",
                "desc":"#๊ตญ๋‚ด #๊ฐ€์š” #๋‚ด์ ๋Œ„์Šค #๊ธฐ๋ถ„์ „ํ™˜"
            }
        },
        {
            "id":"1",
            "sort":"3",
            "snippet":{
                "themeColor":"rgb(245, 155, 35)",
                "thumbnail":"./assets/images/slide_spot3_13.jpg",
                "title":"์˜ค๋Š˜๋„ ๋ฐฉ๊ตฌ์„ ๋‘๋‘ ์นซ",
                "desc":"#๊ตญ๋‚ด #๊ฐ€์š” #๋‚ด์ ๋Œ„์Šค #๊ธฐ๋ถ„์ „ํ™˜"
            }
        }
	]
}

Hot/New/Mood ํƒญ๋ฉ”๋‰ด์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฅ˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•ด๋‹น๋ฐ์ดํ„ฐ json ํŒŒ์ผ์„ ๋งŒ๋“ ๋‹ค.sort๋กœ ๋ฐ์ดํ„ฐ์ข…๋ฅ˜๋ฅผ ๊ตฌ๋ถ„ํ•ด์ค€๋‹ค.

jQuery

/**
   * spot slide
   * @sort
   * [1-hot]
   * [2-new]
   * [3-mood]
   * @data : mainProgramData
   */
  function mainProgramData(sort){
    fetch('./assets/data/mainProgramData.json')
    .then((response) => response.json())
    .then((json) => {
        data = json.items;

        result = (sort === '1') ? data : data.filter(function (parm) {return parm.sort == sort });
  
        let html = '';
        result.forEach(element => {
            html+=` <div class="swiper-slide">
            <div class="img-wrap" >
                <div class="img-box" style="background:${element.snippet.themeColor}">
                    <img src="${element.snippet.thumbnail}" alt>
                </div>
            </div>
            <div class="txt-box">
                <strong class="title"><a href="">${element.snippet.title}</a></strong>
                <p class="desc">${element.snippet.desc}</p>
            </div>
        </div>`
            
        });
  
        $('#dataList1').html(html)
        
        var spotswiper = new Swiper('.spot-slide', {
          slidesPerView: 'auto',
          centeredSlides: true,
          initialSlide: 5,
          loop: true,
          pagination: {
            el: '.pagination',
            clickable: true
          },
       
        });
      })
  }
  mainProgramData();

result ๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด sort๊ฐ€ [1-hot]๋ฉ”๋‰ด ์ผ ๊ฒฝ์šฐ data = json.items;์ด ๋‚˜ํƒ€๋‚˜๋„๋ก ํ•œ๋‹ค.

: data.filter(function (parm) {return parm.sort == sort });
๊ทธ๋ ‡์ง€ ์•Š์„๊ฒฝ์šฐ filter(items ํ•„ํ„ฐ๋ง) ๋ฅผ ์ด์šฉํ•ด์„œ ๋ถ„๋ฅ˜๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฒŒ ํ•œ๋‹ค.

markup

<ul class="tab-list">
  <li class="tab-item on" data-sort="1"><a href="">Hot</a></li>
  <li class="tab-item" data-sort="2"><a href="">New</a></li>
  <li class="tab-item" data-sort="3"><a href="">Mood</a></li>
</ul>

ํƒญ ๋ฉ”๋‰ด ๋งˆํฌ์—…์— data-sort="" ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜์—ฌ ํ•ด๋‹น๋ฉ”๋‰ด ํด๋ฆญ ์‹œ ๋ถ„๋ฅ˜๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜ค๊ฒŒํ•œ๋‹ค.

jQuery

 $('.spot .tab-item').click(function(e){
    e.preventDefault();
    sort = $(this).data('sort');
    $(this).addClass('on').siblings('li').removeClass('on')
    mainProgramData(sort);
  })
  $(".spot .tab-item.on").trigger("click");

๋ณ€์ˆ˜์— ์œ„์— ๋งŒ๋“ค์–ด ๋‘” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
ํด๋ฆญ์„ ํ•ด์•ผ๋งŒ ๋‚˜ํƒ€๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ•์ œ๋กœ ํ•œ๋ฒˆ ํด๋ฆญํ•ด์ฃผ๋Š” .trigger("click")์„ ํ†ตํ•ด ํด๋ฆญํ•˜์ง€ ์•Š์•„๋„ ๋ณด์ผ ์ˆ˜ ์žˆ๋„๋กํ•œ๋‹ค.


๐Ÿ“š[LP] 2. ์‹œ๊ฐ„๊ณ„์‚ฐ์„ ํ†ตํ•ด ํŠน์ •์‹œ๊ฐ„ ์ด๋ฒคํŠธ๋ฐœ์ƒ ์‹œํ‚ค๊ธฐ

json

 "items":[
       {
        "id":"1",
        "snippet":{
            "thumbnail":"./assets/images/slide_schedule_01.jpg",
            "date":"03์›” 02์ผ",
            "time":{
                "starhours":"17",
                "starMin":"30",
                "endhours":"21",
                "endMin":"30"
            },
            "title":"CRAVITY",
            "desc":"Seoul EBS Studio Hall,Seoul"
        }
       },
	]

jQuery

var now = new Date();
// ํ˜„์žฌ์‹œ๊ฐ„ 
var hours = now.getHours();       // ํ˜„์žฌ ์‹œ๊ฐ„

data.forEach(element => {

  if((element.snippet.time.starhours - hours) <= 1 && (element.snippet.time.endhours - hours) >= 1){
  	live = 'on';
  }else{
  	live = '';
}

ํ˜„์žฌ์‹œ๊ฐ„๊ณผ ๋ถ„์„ ๊ตฌํ•œ๋‹ค.
์‹œ๊ฐ„ : console.log(์„ค์ •์‹œ๊ฐ„ - ํ˜„์žฌ์‹œ๊ฐ„) ์„ ํ†ตํ•ด ์Œ์ˆ˜๊ฐ€ ๋‚˜์˜ฌ ๊ฒฝ์šฐ ์„ค์ •๋œ ์‹œ๊ฐ„์— ์ด๋ฒคํŠธ๊ฐ€ ์ง„ํ–‰์ค‘์ธ ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

if์กฐ๊ฑด๋ฌธ์„ ํ†ตํ•ด ์ด๋ฒคํŠธ ์‹œ์ž‘์‹œ๊ฐ„์—์„œ ํ˜„์žฌ์‹œ๊ฐ„์„ ๋บ€ ๊ฐ’์ด 1(์–‘์ˆ˜)๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์„๊ฒฝ์šฐ์™€ ๋๋‚˜๋Š”์‹œ๊ฐ„์ด ํ˜„์žฌ์‹œ๊ฐ„ 1(์–‘์ˆ˜)๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์„๊ฒฝ์šฐ live์ด๋ผ๋Š” ์ด๋ฒคํŠธ๊ฐ€ on๋˜๊ฒŒ ํ•œ๋‹ค.


๐Ÿ“š[LP] 3. ์ปจํ…์ธ  ํด๋ฆญ์‹œ ํ•ด๋‹น ํƒญ์œผ๋กœ ์ด๋™ํ•˜๊ธฐ

markup

jQuery

$('.podcast .swiper-slide a').click(function(e){
    e.preventDefault();
    anchor = $(this).data('target');
    anchorMove = $('.program').offset().top

    $('html,body').animate({scrollTop:anchorMove-50});
    $(anchor).addClass('on').siblings('.program .program-box').removeClass('on');

    $('.program .tab-item').eq(2).trigger('click');

    $('.category-box a').each(function(i,item){
      if($(this).attr('href') == anchor){
        $(this).parent().addClass('on').siblings().removeClass('on')
      }
    })
  })

References

plumpsqrl9744.log : Javascript ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ(Data binding)
Georges Velog : ๋‹จ๋ฐฉํ–ฅ ๋ฐ”์ธ๋”ฉ๊ณผ ์–‘๋ฐฉํ–ฅ ๋ฐ”์ธ๋”ฉ
sunaaank.log : [WEB] ์–‘๋ฐฉํ–ฅ ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ
yenaryu.log : [Web] Json ๋ฐ์ดํ„ฐ ํ™œ์šฉ ๋ฐ ๋น„๋™๊ธฐํ†ต์‹ 
Log : [Ajax] ๋น„๋™๊ธฐํ†ต์‹ ์ด๋ž€?

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