jQuery로 애니메이션을 구현할 때 흔히 만나게 되는 문제가 하나 있다. 바로 애니메이션 큐(queue) 이다.
예를 들어, 네비게이션 메뉴에 마우스가 오면 애니메이션이 동작하게 코딩이 된 경우, 마우스를 여러번 움직였을 때, 이전 애니메이션이 멈추기 전까지 마지막 애니메이션이 동작하지 않는 현상이 바로 애니메이션 큐로 인해 발생하는 문제다.
이러한 문제가 일어나는 이유는 이벤트가 일어날 때마다 큐를 만들기 때문에 이들이 순차적으로 진행되면서 '원하지 않는' 효과가 나타나는 것이다.
사실 말로는 표현이 어려운데 아래 예제를 보면 바로 알 수 있다.
$(".nostop li").hover(
function () {
$(this).animate({width:"200px"},500);
},
function () {
$(this).animate({width:"80px"},500);
}
);
//animate with stop()
$(".stop li").hover(
function () {
$(this).stop().animate({width:"200px"},500);
},
function () {
$(this).stop().animate({width:"80px"},500);
}
);
div {
font: 12px black;
margin: 40px 0 10px 0;
}
.stop() 이 호출되면 현재 동작하고 있는 애니메이션은 즉시 동작이 중단된다. 그리고 큐잉되어 있는 것 대신에 다음 동작이 즉시 수행된다. 하지만 .stop()은 애니메이션에 대해서만 동작하기 때문에 다른 종류의 큐를 중단하고 싶다면, .clearQueue() 를 대신 사용해야 한다.