2018년 8월 9일
오늘 한 일
- 배민찬 step4
내일 할 일
- 배민찬 step4 PR
- 러버덕 스터디: how browser works
배민찬
화면전환효과 리팩토링
SceneChange
클래스의 기능이 많고 복잡해서 분리하기로 함
설계
버튼
각 버튼(왼쪽, 오른쪽, 인덱스)이 애니메이션을 가짐
- animation 함수는
currying
으로 파라미터를 넘겨받음
이벤트가 발생하면 애니메이션을 sceneChange에 넘겨줌
scene
SceneChange는
- 타깃 scene에 대한 index를 계산할 수 있는
함수
를 받음(indexCalculator) - 현재 scene과 타깃 scene을 넘겨받은 애니메이션에 넣어주기만 함
class SceneChangeButton {
constructor({animation, speed}) {}
bindAnimateScene(handler) {}
}
class SceneChange {
// @param {Array} sceneChangeButtons
// @param {NodeList} sceneList
constructor({sceneChangeButtons, sceneList}) {}
init() {
sceneChangeButtons.forEach(scb => {scb.bindAnimateScene(this.animateScene)})
}
animateScene({animation, index}) {}
}
animation
currying을 이용함. 스피드값을 넘겨받으면 해당 스피드를 가진 animation함수를 리턴
let fade = function({speed}) {
return function({previous, next}) {
...
}
}
- 사용자 입장에서 speed만 알고 나머지는 몰라도 되는 장점