본문 바로가기

Development /JavaScript

jQuery : Animation

jQuery화면에서 visual effect간편하게 만들고 변경할 있게 도와 줍니다. 이런 visual effect화면에 대한 사용자의 만족도를 높이는 방법 중에 하나입니다. 본 글에서는 jQuery Animation 프레임워크를 살펴 보겠습니다. 

 

1. jQuery Animation 프레임 워크의 일반적인 특징

 애니메이션은 얼마만큼의 시간동안 visual effect나타내야 하는지를 지정해야 합니다. 시간은 ms(1/1000)나타내거나 지정되어 있는 문자열로 나타낼 있습니다. jQuery에서 기본적으로 지정되어 있는 문자열은 “fast”, “slow”있습니다. (“fast” = 200ms, “slow” = 600ms)외의 문자열 지정법은 jQuery.fx.speeds 문자열/숫자로 매핑하여 정의있습니다. 만약 외의 jQuery인지하지 못하는 문자열을 지정 한다면 기본값인 400ms지정 됩니다. 

jQuery visual effect비동기 방식으로 실행이 되고 visual effect 메서드의 대부분은 번째 전달인자는 지속시간, 번째 전달인자는 콜백 함수(애니메이션종료후에 실행할 함수)있습니다.

비동기 방식의 애니메이션 메서드를 호출하면, 바로 반환값을 주고 애니메이션은 background에서 수행이 이루어 집니다. 비동기 방식의 메서드는 애니메이션이 종료되기전에 바로 반환값을 돌려주므로 다음에 나타낼 visual effect 메서드를 추가로 설정 해있습니다. 이런 애니메이션은 기본적으로 실행 대기열에 쌓여서 이미 애니메이션 되고 있는 요소가끝날 때까지 미루다가 끝난 후에 동작을 하게 됩니다.

 

 

 객체 프로퍼티로 전달을 하는 방법은 사용자 정의 애니메이션인  animate() 메서드에서 일반적으로 사용 합니다. 객체 프로퍼티의 옵션 객체를 사용하면 옵션을 지정할 있습니다. 옵션 객체에 대해서는 4.2에서 상세하게 알아 보겠습니다.

 

 

2.기본적인 visual effect 메서드

visual effect 메서드는 기본적으로 단순하게 엘리먼트들을 보여주고 감추는 메서드가 있습니다. 문서 레이아웃을 보여주고 감추는 방식의 차이를 크게 세 가지로 분류해서 간단하게 알아 보겠습니다.

 

fadeIn(), fadeOut(), fadeTo()

엘리먼트들을 알파(불투명도)을 조절하는 CSS opacity 프로퍼티를 사용하여 보여주고 감춥니다. fadeTo현재의 알파값에서 지정한 알파값으로 애니메이션 됩니다.

 

show(), hide(), toggle()

엘리먼트들의 width , height , 알파값을 이용해 문서 레이아웃에서 요소를 보여주고 감춥니다. toggle은 실행된 요소의 보여지는 상태를 전환 해줍니다.

 

slideDown(), slideUp(), slideToggle()

엘리먼트들의 높이값을 이용해 아래로 슬라이드를 하게 해줍니다. 그리고 CSS display 프로퍼티를 사용하여 엘리먼트의 영역을 보여주고 감춥니다.

 

기본적인 visual effect 메서드들을 사용한 애니메이션 예제

 jQuery에서는 실행 대기열 관련 메서드로 visual effect제어있습니다

 번째로 stop() 이라는 메서드는 2개의 불리언 값을 받는 메서드로 선택된 엘리먼트의 실행중인 애니메이션을 중단하는 함수 입니다. 번째 인자값은 선택된 엘리먼트의 대기열을 비울 것인지 설정 해주는 입니다. 기본 값은 false생략이 가능하고 생략대기중인 애니메이션은 취소가 되지 않습니다. 번째 인자 값은 stop() 메서드가 실행된 시점에서의 CSS 프로퍼티를 유지할지 아니면 최종 값으로 바꿀지를 설정해 주는 값입니다.

 

 예를들어 설명 드리겠습니다.  엘리먼트가 우측으로 100만큼 이동하는 애니메이션중에서 50위치에 stop() 메서드가 실행되었다고 가정해보겠습니다. stop()의 인자값이 true이면 즉시 100으로 이동 시키고 false이면 50으로 유지 시킵니다.

 

 번째로 delay() 라는 메서드는 실행 대기열 시간에 입력받은 값 만큼 지연 값을 추가 해주는 메서드 입니다.  번째 전달 인자는 다른 함수와 동일하게 ms단위의 지연 시간이나 지정된 문자열 입니다. 번째 전달 인자는 대기열 명이고 필수 값은 아닙니다. 대기열 명을 따로 관리하기 위해 지정하지 않았다면 대기열 명을 적을 필요는 없습니다.

 

delay() 사용한 애니메이션 예제

 

4. 사용자 정의 애니메이션

 사용자 정의 애니메이션을 사용 하려면 animate() 메서드를 사용하면 됩니다. animate() 메서드는 단순한 visual effect 매서드가 제공 하는것 보다 복잡한 visual effect만들 있습니다. animate()번째 전달 인자는 어떤 효과를 애니메이션 것인지 정해 주고, 번째전달 인자는 어떻게 애니메이션 것인지 정해 줍니다.

 번째 전달 인자는 필수 입니다. 번째 전달 인자에는 CSS 속성과 값을 프로퍼티로 지정한 객체를 넘겨줘야 합니다. 이때 animate() 메서드는 현재 CSS속성값을 사용자가 전달한 CSS 값으로 애니메이션합니다.

 두 번째 전달 인자는 필수 값이 아닙니다. 번째 전달 인자에는 애니메이션의 옵션 객체를 넘길 있습니다. 이때 옵션 객체를 넘기지 않고 가장 많이 사용되는 옵션인 지속 시간, easing 함수명, 콜백 함수를 차례대로 넘겨줄 있습니다.

 

애니메이션의 프로퍼티 객체와 옵션 객체는 4.1, 4.2 에서 자세하게 알아보겠습니다.

 

 

* easting 함수란?

 전체 애니메이션의 적용시간 비율을 원하는 진행 비율로 매핑을 하는 함수 입니다.

기본 easing 함수는 기본적으로 사인곡선을 표현 해줍니다. 느리게 시작해 빠르게 진행 되다가 나중에 다시 느려집니다. 사인곡선을 나타내는 값은 “swing”이고 “linear”라는 이름의 평범한 선형 easing 함수도 있습니다. 그리고 애니메이션의 속도 값을 문자열로 지정 하듯이 jQuery.easing 객체로 사용자 정의 easing 함수도 추가할 있습니다. jQuery UI 라이브러리가 확장 easing 함수들을 보유하고 있습니다.

4.1 애니메이션 프로퍼티 객체

 첫 번째 전달인자에는 객체만 넘길 수 있습니다. 객체의 프로퍼티명은 CSS속성명이고, 프로퍼티 값은 현재의 값에서 애니메이션 되어야 할 값을 지정해주면 됩니다. 프로퍼티에는 숫자형만 가능하므로 폰트, display등의 문자형(문자열을열거하는방식)은 불가능 합니다. 숫자형 값은 px로 가정하고 상대값으로 지정을 하고 싶을 때에는 값 앞에 접두사로 감소시에는"-=", 증가시에는 "+=" 을 붙여주면 됩니다.

 주의점은 프로퍼티명에 margin-top 같이 하이픈(-)이 들어가는 경우가 생길 수 있습니다. 그러나 JavaScript에서는 프로퍼티명에 하이픈을 사용할 수 없기 때문에 프로퍼티명을 따옴표("") 안에 작성해줘야 합니다.

 프로퍼티의 값에 대해 추가로 알아보자면 숫자형만이 아닌 jQuery 애니메이션에서 지원하는 show, hide, toggle을 사용하면 현재 애니메이션이 끝난 후에 show() , hide() 메서드를 호출합니다.

 

4.2 애니메이션 옵션 객체

 애니메이션의 옵션 객체는 필수 요소는 아닙니다. 옵션 객체에는 애니메이션 실행 방법을 지정한 옵션이 들어 있으며 jQuery버전에 따라 계속 추가되고 있습니다. 주로 사용되는 옵션은 위에서 설명 했었던 duration, complete, easing 메서드들과 애니메이션을 실행시에 대기열에 담을 지를 정하는 queue등이 있습니다. “queue : false” 옵션으로 추가되면 대기열에 등록이 되지 않게 됩니다. 대기열에 등록되지 않은 애니메이션은 바로 시작이 되고 대기열에 있는 다른 애니메이션과는 서로 연관 관계가 없어 집니다.

 

* jQuery버전이 계속 발전해 나가고 있습니다. 글은 1.4 이상 기준으로 작성 되었습니다.

 

 

참고 문헌 사이트

- JavaScript The Definitive Guide 6/E

- http://api.jquery.com/