μ μκΈ°κ° | 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
ν¨μκ° μ€νλλ©΄μ κ°μ΄ κ³μν΄μ λ³ννμ¬ κ΅μ²΄κ° μ΄λ£¨μ΄μ§λ―λ‘ λ§μΉ νλ©΄μμλ μ«μκ° μ¬λΌκ°λ λ°©μμΌλ‘ ννμ΄ λ©λλ€.
π νμ μ λλ©μ΄μ
π νμ 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
λ‘ μ΄μ©νκΈ° μν΄ μμ±νμμ΅λλ€.
π swipervar 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μ΄ νμ μκ³ ,μΉ΄μΉ΄μ€λͺ¨λΉλ¦¬ν° 리ν¬νΈ
λ©λ΄λ₯Ό ν΄λ¦νμμ λλ§ μ΄λν μ μλλ‘ ν μ μμμ΅λλ€!
π¬ μ μνκΈ° μ , ν¨μ¨μ±μ μν΄ νμ΄μ§λ§λ€ 곡ν΅λ λΆλΆμ μ΅λν νμ€νκ² μ‘κ³ μ μμ μμνμ΄μΌ νλλ° κ·Έ λΆλΆμ΄ μ’ μ λλ‘ μ΄λ£¨μ΄μ§μ§ μμ λΆλΆμ΄ μμ΄μ μ‘°κΈ μμ¬μ μ΅λλ€. νμ ν μΌμ΄ μμ λλ μ μνκΈ° μ , νμ΄μ§λ§λ€ κΌΌκΌΌν μ΄ν΄λ΄μ 곡ν΅λ λΆλΆμ κ°κ° λΆλ₯νλ κ²μ΄ νμ μ μ₯μ μ κ·Ήλν ν μ μλ€κ³ ν¬κ² λκΌμ΅λλ€. νμ§λ§ μ’μ μ μ΄ λ λ§μμ΅λλ€. μΌλ¨ μ μμ κ°μ΄νλ ν νμ΄κΈ° λλ¬Έμ νΌμ μμ ν λλ³΄λ€ μ± μκ°λ λ λ§μ΄ λκΌκΈ° λλ¬Έμ μ’ λ μ μ€νκ² μμ μ μνκ³ , λ€λ₯Έ νμμ΄ μ΄ μ½λλ₯Ό 보면μ νΌμ μ μνλ€λ©΄ λ―Έμ² μκ°νμ§ λͺ»νλ λ°©μμ λ³Ό μ μμ΄μ λ λ°μ νκ³ μ±μ₯ν μ μλ€λ μ μ΄ κ°μ₯ μ’μλ λΆλΆμ΄μμ΅λλ€. μ μνλ λμ μλ‘ λΆμ‘±ν μ μ μ±μμ£Όκ³ λ°°λ €ν΄μ£Όλ©΄μ ν° μΆ©λμμ΄ μ μμ ν μ μμκ³ , λ§€λ² νΌμ μμ νκΈ° λλ¬Έμ νμ μ λλ €μμ΄ μ²μμλ μ‘°κΈ μμμ§λ§ κ·Έ κ°μ λν κΈ°μ°μκ³ , μ μμ λ§μΉ λλ νμλ€κ³Όμ κ΄κ³λ λ μ’μμ‘κ³ ν° μ±μ·¨κ°μ λλ μ μλ μ’μ μκ°μ΄μμ΅λλ€!