πŸ“„ kakao Mobility

μ΅œμ€€ν˜„Β·2022λ…„ 7μ›” 30일
0
post-thumbnail
μ œμž‘κΈ°κ°„ 22.07.04 ~ 22.07.07 (4일 μ†Œμš”)
μ‚¬μš© μ–Έμ–΄ html, scss, jquery
μ‚¬μš© ν”ŒλŸ¬κ·ΈμΈ gsap, swiper
λΆ„λ₯˜ ν˜‘μ—…, pc, 클둠코딩


πŸ‘¨β€πŸ‘§β€πŸ‘¦ ν˜‘μ—…

πŸ’¬ kakao Mobility μ‚¬μ΄νŠΈλŠ” 본인을 포함해 총 3λͺ…이 μ œμž‘ν•œ νŽ˜μ΄μ§€μž…λ‹ˆλ‹€.

βœ” 본인이 λ§Œλ“  νŽ˜μ΄μ§€

πŸ’¬ μ €λŠ” λ©”μΈνŽ˜μ΄μ§€μ™€ μ„œλΉ„μŠ€ > 카카였T νŽ˜μ΄μ§€μ— μžˆλŠ” λͺ¨λ“  tab뢀뢄을 λ‹΄λ‹Ήν•˜μ˜€μŠ΅λ‹ˆλ‹€

πŸ–Š λ©”μΈνŽ˜μ΄μ§€

πŸ“Œ 숫자 둀링 이벀트


πŸ’¬ μ‚¬μ΄νŠΈμ— λ“€μ–΄κ°€μžλ§ˆμž λ©”μΈνŽ˜μ΄μ§€μ—μ„œ λ°”λ‘œ λ³΄μ—¬μ§€λŠ” 숫자 둀링 μ΄λ²€νŠΈμž…λ‹ˆλ‹€.


πŸ“ μ‹œμž‘κ°’κ³Ό μ΅œμ’…κ°’ λ§Œλ“€κΈ°

<div class="day-distance">
  <strong>였늘 ν•˜λ£¨μ˜ λˆ„μ  이동거리</strong>
  <em><span>17177098</span>km</em>
</div>
var lastNum = parseInt($('.day-distance span').text())
var startNum = lastNum - (lastNum / 10)

πŸ’¬ μ΅œμ’…μ μœΌλ‘œ λ³΄μ—¬μ§ˆ 값을 html에 λ„£κ³  lastNum λ³€μˆ˜μ—λ„ λ„£μ–΄μ£Όμ—ˆμŠ΅λ‹ˆλ‹€.
(❗ 단, htmlμ—μ„œμ˜ 값은 λ¬Έμžμ—΄ ν˜•νƒœμ΄λ―€λ‘œ parseIntλ₯Ό 톡해 μ •μˆ˜λ‘œ λ³€ν™˜ν•΄μ£Όμ—ˆμŠ΅λ‹ˆλ‹€.)

πŸ’¬ 처음 λ‘œλ“œ 될 λ•Œμ˜ μ‹œμž‘κ°’μ„ startNum λ³€μˆ˜μ— λ„£μ–΄μ£Όμ—ˆμŠ΅λ‹ˆλ‹€.
(lastNumμ—μ„œ 10을 λ‚˜λˆ„κ³  λΉΌμ€€ 값을 μŠ€νƒ€νŠΈ κ°’μœΌλ‘œ μž„μ˜λ‘œ μ •ν•˜μ˜€μŠ΅λ‹ˆλ‹€.)


🚩 νŽ˜μ΄μ§€κ°€ λ‘œλ“œλ˜λ©΄ startNumμ—μ„œ μΆœλ°œν•˜μ—¬ μ΅œμ’…μ μœΌλ‘œ lastNumκΉŒμ§€ 둀링이 λ˜λŠ” μ΄λ²€νŠΈμž…λ‹ˆλ‹€.


πŸ“ μ‹œμž‘κ°’μ—μ„œ μ΅œμ’…κ°’μœΌλ‘œ 5μ΄ˆλ™μ•ˆ λ³€ν™” μ£ΌκΈ°

 var distance = {
   change: startNum
 }
gsap.to(distance, 3, {
  change: lastNum,
  onUpdate: changeNumber,
  delay: 1.2
})

πŸ’¬ distanceλΌλŠ” 객체λ₯Ό λ§Œλ“€κ³  κ·Έ μ•ˆμ— change 속성을 λ§Œλ“€μ–΄ startNum 값을 λ„£μ–΄μ£Όμ—ˆμŠ΅λ‹ˆλ‹€. κ·Έ ν›„, gsap.toλ₯Ό μ΄μš©ν•˜μ—¬ distance에 changeλ³€μˆ˜λ₯Ό 3μ΄ˆλ™μ•ˆ lastNum으둜 λ³€ν™”ν•˜λ„λ‘ ν•΄μ£Όκ³  gsap μ½œλ°±ν•¨μˆ˜ onUpdate μ˜΅μ…˜μ„ μΆ”κ°€ν•˜κ³  changeNumberλΌλŠ” ν•¨μˆ˜λ₯Ό μ‹€ν–‰λ˜λ„λ‘ ν•˜μ˜€μŠ΅λ‹ˆλ‹€. μ—¬κΈ°μ„œ

🚩 onUpdate ν•¨μˆ˜λŠ” μ• λ‹ˆλ©”μ΄μ…˜μ΄ μ§„ν–‰λ˜λŠ” λ™μ•ˆ 계속 μ‹€ν–‰λ˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.


πŸ“ changeNumber() ν•¨μˆ˜

function changeNumber() {
  var currentNum = distance.change;
  var push = parseInt(currentNum).toLocaleString('ko-KR');
  $('.day-distance span').text(push)
}

πŸ’¬ distance 객체에 λ“€μ–΄μžˆλŠ” change 속성을 currentNumλ³€μˆ˜μ— λ„£μ–΄μ£Όκ³  μ •μˆ˜λ‘œ λ³€ν™˜ν•˜μ—¬, toLocaleString('ko-KR')을 μ΄μš©ν•˜μ—¬ ν•œκ΅­μ—μ„œ ν†΅μš©λ˜λŠ” 숫자 ν‘œν˜„ 방식인 3μžλ¦¬λ§ˆλ‹€ 콀마(,)λ₯Ό 찍어주도둝 ν•˜μ˜€μŠ΅λ‹ˆλ‹€. 그리고 push λ³€μˆ˜μ— λ„£μ–΄ html에 textλ₯Ό κ΅μ²΄ν•˜μ—¬ μ™„μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€!

  • toLocaleString() : 지역에 λ§žλŠ” ν‘œν˜„λ°©μ‹μœΌλ‘œ 좜λ ₯함.
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β numberκ°’μœΌλ‘œ toLocaleString('ko-kr')을 μ‚¬μš©ν•˜λ©΄
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ν•œκ΅­μ—μ„œ ν†΅μš©λ˜λŠ” λ°©μ‹μœΌλ‘œ 숫자 3μžλ¦¬λ§ˆλ‹€ 콀마(,)λ₯Ό Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β μ°μ–΄μ€Œ.

πŸ”˜ μ΅œμ’…μ½”λ“œ

var lastNum = parseInt($('.day-distance .distance').text()); 
var startNum = lastNum - (lastNum / 10)
var distance = {
	change: startNum
};
gsap.to(distance, 3, {
  change: lastNum,
  onUpdate: changeNumber,
  delay: 1.2
})
function changeNumber() {
  var currentNum = distance.change;
  var push = parseInt(currentNum).toLocaleString('ko-KR'); 
  $('.day-distance .distance').text(push)
}

πŸ’¬ μ΅œμ’…μ μœΌλ‘œ 3μ΄ˆλ™μ•ˆ changeNumber ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜λ©΄μ„œ 값이 κ³„μ†ν•΄μ„œ λ³€ν™”ν•˜μ—¬ ꡐ체가 μ΄λ£¨μ–΄μ§€λ―€λ‘œ 마치 ν™”λ©΄μ—μ„œλŠ” μˆ«μžκ°€ μ˜¬λΌκ°€λŠ” λ°©μ‹μœΌλ‘œ ν‘œν˜„μ΄ λ©λ‹ˆλ‹€.

πŸ–Š 카카였T νŽ˜μ΄μ§€

πŸ“Œ νƒμ‹œ μ• λ‹ˆλ©”μ΄μ…˜



πŸ“ νƒμ‹œ html μž‘μ„±

πŸ’¬ νƒμ‹œ μ• λ‹ˆλ©”μ΄μ…˜μ„ κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄μ„œ λ¨Όμ € λ²„νŠΌκ³Ό 그것과 λ§žλŠ” 컨텐츠λ₯Ό μ—°κ²°ν•˜κΈ° μœ„ν•΄ data속성을 μ΄μš©ν•΄μ„œ 각각 ν†΅μΌν•˜λŠ” 방법을 μ„ νƒν–ˆμŠ΅λ‹ˆλ‹€.

🚩 κ·Έλž˜μ„œ λ²„νŠΌμ„ λˆ„λ₯΄κ²Œ 되면 taxi-typeν΄λž˜μŠ€μ—μ„œ λ²„νŠΌκ³Ό λ™μΌν•œ data속성을 ν˜ΈμΆœν•˜λŠ” μ‹μœΌλ‘œ μ§„ν–‰ν•˜μ˜€μŠ΅λ‹ˆλ‹€.


πŸ“ dataμ†μ„±μœΌλ‘œ ν˜ΈμΆœν•˜κΈ°

$('.animate-taxi button').click(function () {
	$(this).addClass('active').siblings().removeClass('active')
	var activeTab = $(this).data('tab');
	$('.taxi-type').each(function () {
		if ($(this).data('taxi') == activeTab) {}
	})
})

πŸ’¬ 일단 λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄ μ΄λ²€νŠΈκ°€ μ‹€ν–‰λ˜λ‹ˆ click이벀트λ₯Ό μ„ μ–Έν•˜μ˜€μŠ΅λ‹ˆλ‹€. κ·Έ ν›„, λ²„νŠΌμ— active클래슀λ₯Ό μΆ”κ°€ν•΄μ£Όκ³  λ‹€λ₯Έ λ²„νŠΌλ“€μ€ siblings둜 activeλ₯Ό μ œκ±°ν•΄μ£Όμ—ˆμŠ΅λ‹ˆλ‹€.


πŸ’¬ activeTab λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜μ—¬ λ²„νŠΌμ— data('tab')값을 λ„£μ–΄μ£Όμ—ˆμŠ΅λ‹ˆλ‹€.
그리고 반볡문과 쑰건문을 톡해 λ²„νŠΌμ— data-tabκ°’κ³Ό data-taxi값이 같은 값을 ν˜ΈμΆœν•˜λ„λ‘ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.


πŸ“ 1. prevTaxi μ™Όμͺ½ ν•˜λ‹¨μœΌλ‘œ 움직이기

if ($(this).data('taxi') == activeTab) {
  var prevTaxi = $('.taxi-type.active').children('img');
  timeLine = gsap.timeline()
  .to(prevTaxi, 1,{
    xPercent: -124,
    yPercent: 100,
    scale: .8,
    skewX: -10,
    ease: Power1.easeIn             
  })
}

πŸ’¬ λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄ ν΄λ¦­ν•˜κΈ° μ „ active된 νƒμ‹œμ™€ ν΄λ¦­ν–ˆμ„ λ•Œ λ‚˜μ˜¬ νƒμ‹œ 총 2κ°œκ°€ 움직이기 λ•Œλ¬Έμ— ν΄λ¦­ν•˜κΈ° μ „ νƒμ‹œλ₯Ό μ›€μ§μ΄κ²Œ ν•˜κΈ° μœ„ν•΄μ„œ prevTaxiλ³€μˆ˜μ— λ„£μ–΄μ£Όμ—ˆμŠ΅λ‹ˆλ‹€.
κ·Έ ν›„, gsap.timeline()을 λ§Œλ“€κ³  prevTaxiλ₯Ό μ™Όμͺ½ ν•˜λ‹¨μœΌλ‘œ μ•Œλ§žκ²Œ μ‘°μ •ν•˜μ—¬ gsapλ₯Ό μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€.


πŸ“ 2. prevTaxi 우츑 μƒλ‹¨μœΌλ‘œ κ³ μ •

  .set(prevTaxi, {
  	xPercent: 124,
  	yPercent: -100,
  })

πŸ’¬ μ™Όμͺ½ ν•˜λ‹¨μœΌλ‘œ 움직인 prevTaxiλŠ” μ• λ‹ˆλ©”μ΄μ…˜μ΄ μ™„λ£Œκ°€ 되면 κ·Έ μ¦‰μ‹œ 우츑 μƒλ‹¨μœΌλ‘œ ν™”λ©΄μ—μ„œ μ•ˆλ³΄μ΄κ²Œ set으둜 고정을 ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄ μš°μΈ‘μƒλ‹¨μ—μ„œ μ• λ‹ˆλ©”μ΄μ…˜μ΄ μ‹œμž‘λ˜κΈ° λ•Œλ¬Έμ— 이 과정이 ν•„μš”ν•˜μ˜€μŠ΅λ‹ˆλ‹€


πŸ“ 3. activeTaxi 우츑 μƒλ‹¨μ—μ„œ ν™”λ©΄μœΌλ‘œ

activeTaxi = $(this).children('img');
gsap.to(activeTaxi, 1,{
  xPercent: 0,
  yPercent: 0,
  scale: 1,
  skewX: 0,
  ease: Power1.easeInOut,
  delay: .3
})

πŸ’¬ active λ˜μ§€ μ•Šμ€ νƒμ‹œλ“€ μ „λΆ€ cssλ₯Ό 톡해 우츑 μƒλ‹¨μœΌλ‘œ κ³ μ •μ‹œν‚¨ μƒνƒœμ΄κ³  prevTaxi λ˜ν•œ set으둜 우츑 상단에 κ³ μ •ν•œ μƒνƒœμ΄λ―€λ‘œ gsap.to둜 x: 0, y: 0둜 μ›€μ§μ΄κ²Œ ν•΄μ£Όκ³  κ·Έ λ°–μ˜ μ˜΅μ…˜λ“€λ„ μ•Œλ§žκ²Œ μ‘°μ •ν•΄μ£Όμ—ˆμŠ΅λ‹ˆλ‹€.


πŸ“ 4. active클래슀 μΆ”κ°€/제거

$(this).addClass('active').siblings().removeClass('active')

πŸ’¬ ν˜„μž¬ 반볡문 taxi-type으둜 걸렀있기 λ•Œλ¬Έμ— μ—¬κΈ°μ„œμ˜ $(this)λŠ” taxi-typeμž…λ‹ˆλ‹€. λ§ˆμ§€λ§‰μœΌλ‘œ 이 뢀뢄에 activeλ₯Ό μΆ”κ°€ν•΄μ£Όκ³  κ·Έ ν˜•μ œμš”μ†Œλ“€μ€ μ œκ±°ν•΄μ£Όμ–΄ μ™„μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

πŸ”˜ μ΅œμ’…μ½”λ“œ

$('.animate-taxi button').click(function () {

  allText = gsap.utils.toArray('.taxi-type p')

  gsap.to(allText, {
    x: 0,
    opacity: 0,
    ease: Power1.easeOut
  })

$(this).addClass('active').siblings().removeClass('active')

  var activeTab = $(this).data('tab');

  $('.taxi-type').each(function () {

    if ($(this).data('taxi') == activeTab) {

      var prevTaxi = $('.taxi-type.active').children('img');

      timeLine = gsap.timeline()
      .to(prevTaxi, 1,{
        xPercent: -124,
        yPercent: 100,
        scale: .8,
        skewX: -10,
        ease: Power1.easeIn             
      })
      .set(prevTaxi, {
        xPercent: 124,
        yPercent: -100,
      })

      activeTaxi = $(this).children('img');
      activeText = $(this).children('p');

      gsap.to(activeTaxi, 1,{
        xPercent: 0,
        yPercent: 0,
        scale: 1,
        skewX: 0,
        ease: Power1.easeInOut,
        delay: .3
      })
      gsap.to(activeText, {
        x: -50,
        opacity: 1,
        delay: .8,
        ease: Power1.easeOut
      })

		$(this).addClass('active').siblings().removeClass('active')
    }
  })
})

πŸ’¬ νƒμ‹œ text gsapκΉŒμ§€ ν¬ν•¨λœ μ΅œμ’… μ½”λ“œμž…λ‹ˆλ‹€.

πŸ“Œ λŒ€λ¦¬ Swiper


πŸ’¬ 카카였T νƒ­ 쀑 λŒ€λ¦¬ νƒ­ 쀑간에 λ“€μ–΄μžˆλŠ” μ»¨ν…μΈ μž…λ‹ˆλ‹€
이 μ»¨ν…μΈ λŠ” swiper둜 μ œμž‘ν•˜μ˜€μŠ΅λ‹ˆλ‹€.


πŸ“ html

πŸ’¬ swiperμ•ˆμ— λŒ€λ¦¬μš΄μ „ type듀을 λ„£κ³  κ·Έ type의 λ²„νŠΌλ“€μ„ swiper-pagination으둜 μ΄μš©ν•˜μ˜€μŠ΅λ‹ˆλ‹€. 그리고 λ²„νŠΌμ„ λˆ„λ₯Ό λ•Œ μΌμ–΄λ‚˜λŠ” ν™”μ΄νŠΈ κ°€ fade λ˜λŠ” ν˜„μƒμ„ dimmed둜 μ΄μš©ν•˜κΈ° μœ„ν•΄ μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€.


πŸ“ swiper

var swiper = new Swiper(".proxyDetail", {
      effect: "fade",
      simulateTouch:false,
      speed: 400,
      pagination: {
          el: ".swiper-pagination",
          clickable: true,
      },

πŸ’¬ λ²„νŠΌμ„ 클릭할 λ•Œ(μŠ¬λΌμ΄λ“œκ°€ λ°”λ€” λ•Œ), ν™”μ΄νŠΈκ°€ fadeλ˜λ―€λ‘œ effect: "fade"λ₯Ό μΆ”κ°€ν•˜μ˜€κ³ , 일반적으둜 swiperλŠ” 그랩으둜 μŠ¬λΌμ΄λ“œκ°€ μž‘λ™λ˜μ–΄μ„œ 이λ₯Ό λ§‰μ•„μ£ΌλŠ” simulaeTouch: falseλ₯Ό μΆ”κ°€ν•˜μ˜€μŠ΅λ‹ˆλ‹€. 그리고 λ²„νŠΌ(pagination)을 ν΄λ¦­ν•˜λ©΄ μž‘λ™ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— clickable: true도 μΆ”κ°€ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

on: {
  slideChange: function () {
    gsap.set($('.proxy-type p'), {
      xPercent: 0,
      opacity: 0,
    })
    gsap.to($('.dimmed'), .3,{
      opacity: .3,
      yoyo: true,
      repeat: 1,
      ease: Power1.easeOut
    }) // ν™”μ΄νŠΈν˜„μƒ
    var current = $('.proxy-type').eq(this.realIndex)
    gsap.to(current.children('p'), .6, {
      xPercent: 20.6,
      opacity: 1,
      ease: Power1.easeIn
    })
  }
}

πŸ’¬ λ‹€μŒμ€ μŠ¬λΌμ΄λ“œκ°€ λ°”λ€” λ•Œ λ³€ν™”λ˜λŠ” 뢀뢄을 slideChange κΈ°λŠ₯을 μ¨μ„œ μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€. dimmedλŠ” background-colorλ₯Ό #fff둜 css에 μ„€μ •λœ μƒνƒœμ΄κ³  λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ opacity만 μ‘°μ •λ˜κ³  원 μƒνƒœλ‘œ λŒμ•„μ˜€λ―€λ‘œ reverseλ₯Ό μ†μ‰½κ²Œ ν•  수 μžˆλŠ” yoyo: true와 1번 λ°˜λ³΅ν•˜κ²Œ repeat: 1을 μ‚¬μš©ν•˜μ—¬ κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
.eq(this.realIndex)λ₯Ό μ‚¬μš©ν•˜μ—¬ ν˜„μž¬ μŠ¬λΌμ΄λ“œμ˜ realIndex 번호λ₯Ό κ΅¬ν•΄μ„œ current λ³€μˆ˜μ— λ„£μ—ˆκ³  current의 ν…μŠ€νŠΈκ°€ λ‚˜νƒ€λ‚˜κ²Œ κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.



βœ” νŒ€μ›μ΄ λ§Œλ“  νŽ˜μ΄μ§€

πŸ“Œ 카카였λͺ¨λΉŒλ¦¬ν‹° 리포트

πŸ’¬ λ©”λ‰΄μ—μ„œ 카카였λͺ¨λΉŒλ¦¬ν‹° 리포트 메뉴λ₯Ό ν΄λ¦­ν•˜κ²Œ 되면 μ΄λ™κΈ°μˆ  이야기 메뉴 링크둜 μ΄λ™ν•˜κ²Œ 되고 κ·Έ νŽ˜μ΄μ§€ ν•˜λ‹¨μ— 리포트 μ»¨ν…μΈ λ‘œ 슀크둀이 μ΄λ™λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

πŸ“ 또 λ‹€λ₯Έ μ΄λ™κΈ°μˆ  이야기 html

πŸ’¬ μ΄λ™κΈ°μˆ  이야기 νŽ˜μ΄μ§€ html은 movement.html, movementreport.html둜 2개이며 λ‘˜ λ‹€ 같은 μ†ŒμŠ€μž…λ‹ˆλ‹€. λ‹€λ₯Έ 점은 μ΄λ™κΈ°μˆ  이야기메뉴λ₯Ό 클릭할 땐 movement.html둜 μ΄λ™λ˜κ³ , 카카였λͺ¨λΉŒλ¦¬ν‹° λ¦¬ν¬νŠΈλ©”λ‰΄λ₯Ό 클릭할 땐 movementreport.html둜 μ΄λ™λœλ‹€λŠ” 것이고, movementreport.htmlμ—λŠ” 맨 ν•˜λ‹¨ 리포트 μ„Ήμ…˜μ— graphλΌλŠ” ν΄λž˜μŠ€κ°€ μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.


πŸ“ μœ μΌν•œ 클래슀둜 슀크둀 μ΄λ™ν•˜κΈ°

if($('section').hasClass('graph')){
  var location = $('.graph').offset();
  $('html, body').animate({scrollTop : location.top}, 0 );
}

πŸ’¬ λͺ¨λ“  νŽ˜μ΄μ§€μ— κ³΅ν†΅μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 슀크립트 파일인 common.js에 μœ„μ˜ μ½”λ“œλ₯Ό 넣어놓고 카카였λͺ¨λΉŒλ¦¬ν‹° λ¦¬ν¬νŠΈλ©”λ‰΄λ₯Ό λˆ„λ₯Ό λ•Œλ§Œ graph ν΄λž˜μŠ€κ°€ μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ— λ‘œλ“œλ˜λ©΄μ„œ μžμ—°μŠ€λŸ½κ²Œ μ € μ½”λ“œκ°€ μ‹€ν–‰ 될 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

πŸ‘‰ λ‹€λ₯Έ λ°©λ²•μœΌλ‘œ κ΅¬ν˜„!

πŸ’¬ μ œμž‘μ΄ λλ‚˜κ³  λ‚˜μ„œ 이 뢀뢄을 html을 ꡳ이 ν•˜λ‚˜ 더 λ§Œλ“€μ§€ μ•Šκ³  κ΅¬ν˜„ν•  수 μžˆλŠ” 방법이 μžˆμ„κΉŒ 고민을 ν•΄ λ³΄μ•˜κ³ , κ°„λ‹¨ν•œ λ°©μ‹μœΌλ‘œ κ΅¬ν˜„ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.


πŸ“ 카카였λͺ¨λΉŒλ¦¬ν‹° λ¦¬ν¬νŠΈλ©”λ‰΄ 클릭 μ‹œ μ΄λ™κΈ°μˆ  이야기 링크둜 이동

  $('.report').click(function(e){
      e.preventDefault();
      window.location.href = "../subpage/movement.html?report"
  })

πŸ’¬ 카카였λͺ¨λΉŒλ¦¬ν‹° 리포트 메뉴 report에 href 속성값을 μ§€μš°κ³  window.location.hrefλ₯Ό μ΄μš©ν•˜μ—¬ 슀크립트둜 νŽ˜μ΄μ§€ 이동을 ν•˜κ²Œ ν•˜μ˜€μŠ΅λ‹ˆλ‹€. 그리고 이 λ•ŒλŠ” μ£Όμ†Œλ’€μ— νŒŒλΌλ―Έν„° κ°’ ?reportλ₯Ό μΆ”κ°€ν•˜μ—¬ μ΄λ™λ˜μ–΄λ„ νŒŒλΌλ―Έν„° 값을 가지고 κ°€κ²Œ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.


πŸ“ νŒŒλΌλ―Έν„° 값을 읽어 κ΅¬ν˜„

var para = window.location.search
if(para == "?report") {
	$('html, body').animate({scrollTop : $('.sc-report').offset().top}, 0 );
}

πŸ’¬ 그리고 λͺ¨λ“  νŽ˜μ΄μ§€μ— κ³΅ν†΅μœΌλ‘œ μ“°μ΄λŠ” common.js 슀크립트 νŒŒμΌμ— μœ„ μ½”λ“œλ₯Ό λ„£μ–΄μ„œ μ£Όμ†Œμ°½μ— 쓰여진 νŒŒλΌλ―Έν„° 값을 읽을 수 μžˆλŠ” window.location.searchλ©”μ„œλ“œλ₯Ό μ΄μš©ν•˜μ—¬ λ³€μˆ˜ para에 λ„£κ³  쑰건문을 κ±Έμ–΄ ?report와 λ™μΌν•˜λ‹€λ©΄ λ¦¬ν¬νŠΈμ„Ήμ…˜ top으둜 μ΄λ™ν•˜λ„λ‘ ν•˜μ—¬ 또 λ‹€λ₯Έ html이 ν•„μš” μ—†κ³ , 카카였λͺ¨λΉŒλ¦¬ν‹° 리포트 메뉴λ₯Ό ν΄λ¦­ν•˜μ˜€μ„ λ•Œλ§Œ 이동할 수 μžˆλ„λ‘ ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€!



πŸ˜„ ν˜‘μ—…μ„ ν•˜λ©΄μ„œ λŠλ‚€μ 

πŸ’¬ μ œμž‘ν•˜κΈ° μ „, νš¨μœ¨μ„±μ„ μœ„ν•΄ νŽ˜μ΄μ§€λ§ˆλ‹€ κ³΅ν†΅λœ 뢀뢄을 μ΅œλŒ€ν•œ ν™•μ‹€ν•˜κ²Œ 작고 μ œμž‘μ„ μ‹œμž‘ν–ˆμ–΄μ•Ό ν•˜λŠ”λ° κ·Έ 뢀뢄이 μ’€ μ œλŒ€λ‘œ 이루어지지 μ•Šμ€ 뢀뢄이 μžˆμ–΄μ„œ 쑰금 μ•„μ‰¬μ› μŠ΅λ‹ˆλ‹€. ν˜‘μ—…ν•  일이 μžˆμ„ λ•ŒλŠ” μ œμž‘ν•˜κΈ° μ „, νŽ˜μ΄μ§€λ§ˆλ‹€ 꼼꼼히 μ‚΄νŽ΄λ΄μ„œ κ³΅ν†΅λœ 뢀뢄을 각각 λΆ„λ₯˜ν•˜λŠ” 것이 ν˜‘μ—…μ˜ μž₯점을 κ·ΉλŒ€ν™” ν•  수 μžˆλ‹€κ³  크게 λŠκΌˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 쒋은 점이 더 λ§Žμ•˜μŠ΅λ‹ˆλ‹€. 일단 μ œμž‘μ„ κ°™μ΄ν•˜λŠ” ν•œ νŒ€μ΄κΈ° λ•Œλ¬Έμ— 혼자 μž‘μ—…ν•  λ•Œλ³΄λ‹€ μ±…μž„κ°λ„ 더 많이 느꼈기 λ•Œλ¬Έμ— μ’€ 더 μ‹ μ€‘ν•˜κ²Œ μž‘μ—…μ— μž„ν–ˆκ³ , λ‹€λ₯Έ νŒ€μ›μ΄ μ“΄ μ½”λ“œλ₯Ό λ³΄λ©΄μ„œ 혼자 μ œμž‘ν–ˆλ‹€λ©΄ 미처 μƒκ°ν•˜μ§€ λͺ»ν–ˆλ˜ 방식을 λ³Ό 수 μžˆμ–΄μ„œ 더 λ°œμ „ν•˜κ³  μ„±μž₯ν•  수 μžˆλ‹€λŠ” 점이 κ°€μž₯ μ’‹μ•˜λ˜ λΆ€λΆ„μ΄μ—ˆμŠ΅λ‹ˆλ‹€. μ œμž‘ν•˜λŠ” λ™μ•ˆ μ„œλ‘œ λΆ€μ‘±ν•œ 점을 μ±„μ›Œμ£Όκ³  λ°°λ €ν•΄μ£Όλ©΄μ„œ 큰 μΆ©λŒμ—†μ΄ μ œμž‘μ„ ν•  수 μžˆμ—ˆκ³ , 맀번 혼자 μž‘μ—…ν–ˆκΈ° λ•Œλ¬Έμ— ν˜‘μ—…μ˜ 두렀움이 μ²˜μŒμ—λŠ” 쑰금 μžˆμ—ˆμ§€λ§Œ κ·Έ 감정 λ˜ν•œ κΈ°μš°μ˜€κ³ , μ œμž‘μ„ 마칠 λ•ŒλŠ” νŒ€μ›λ“€κ³Όμ˜ 관계도 더 μ’‹μ•„μ‘Œκ³  큰 성취감을 λŠλ‚„ 수 μžˆλŠ” 쒋은 μ‹œκ°„μ΄μ—ˆμŠ΅λ‹ˆλ‹€!

0개의 λŒ“κΈ€