animation 은 복잡한 데이타를 매번 합성해야하기 때문에 처음부터 json object 형태로 핸들링한다.
animations: [{
duration,
timingFunction,
delay,
iterationCount,
direction,
fillMode,
playState,
name,
action: "hover" | "click" | "mouseover" | "mousedown" | "auto",
keyframes: [
{
offset: 0,
properties: [
["x", value],
["height, value],
["y", value]
]
}
]
}]
객체 자체에 timeline 으로 만들 수 있도록 구조화 한다.
- 여러개의 animation 을 동시에 등록할 수 있다.
- 개별 animation 은 여러 개의 속성을 가진다.
- 각각의 속성은 start, end 를 가진다.
- 개별 animation 은 각자의 타임라인을 가진다.
- 개별 animation 은 특정 구간에 반복적으로 실행될 수 있다.
- 개별 animation 은 되도록이면 css animation 형태에 맞춰서 구현한다.
- 개별 animation 은 trigger 를 가질 수 있다.
- animation 은 그룹화 할 수 있다.
- 그룹 animation 에서 설정한 값은 하위 애니메이션에 공통으로 적용된다.
- 타임라인은 기본적으로 js animation 에서 돌아간다. (출력물은 css 가 될 수도 있다 또는 css 전용 animation 툴킷을 만들던가 해야할 듯 하다.)
- 이미 정의된 animation 을 적용한다.
- 새롭게 만들어지는 animation 을 적용한다.
- triiger 에 반응하는 animation 을 적용한다.
- layer 의 모든 속성은 animation 대상이다.
- 속성은 text, number, color, multi, path 형태의 타입을 가진다.
- 각 속성은 형태에 맞는 interpolation 함수를 가진다.
- 몇가지 속성을 동시에 수정 할 수 있는 그룹화된 속성을 가질 수 있다. (예: move -> x, y 를 동시에 움직임)
- transform 관련된 설정은 변환을 미리 해서 나중에 다시 합쳐야 한다. (예를 들어 scale 했다가 rotateY 를 실행 할 수도 있으니깐 순서만 맞춰서 재조합 해야할 듯 )
- transform 도 배열로 관리해야할 듯 하다.
- 애니메이션 때문에 문자열로 관리하면 안되겠구나.
- 대규모 업데이트가 되어야 겠군. 초기 값은 문자열로 넣을 수 있지만 그 이후 값은 모두 json 형태로 관리된다.
초기 값이 문자열 일 때 는 항상 파싱해서 값을 가지고 있는다.
parse -> array or object -> manipulate -> array or object