2012-01-08 2 views
5

div을 마우스로 움직이거나 마우스를 올리면 마우스를 움직여 나가기 위해 노력하고 있습니다. 그러나, 내가 여러 번 들락날을 걸어 갔을 때, div은 기본적으로 내가 호버 한 횟수만큼 앞뒤로 계속 움직였습니다. 이 jsFiddle example을 참조하십시오.jQuery 애니메이션 : 일단 마우스가 나오면 애니메이션을 멈춤

아마 짐작 했겠지만, 내가 마우스를 몇 번이나 썼는지에 관계없이 마우스가 요소 외부에 있으면 div이 멈추도록 (즉, 미끄러 져 들어가기를) 바라고 있습니다. jQuery 애니메이션에 대한 이해가 부족하다고 생각합니다.

$("#state-slider").hover(function() { 
    $(this).animate({ 
    left: '0' 
    }, 500); 
}, function() { 
    $(this).animate({ left: "-270" }, 500); 
}); 

감사합니다.

답변

17

jQuery .stop() function이 필요합니다. 새 애니메이션을 시작하기 전에 명령 체인에 삽입하여 진행중인 애니메이션을 중단하십시오.

$('#state-slider').hover(function() { 
    $(this).stop().animate({ left: 0 }, 500); 
}, function() { 
    $(this).stop().animate({ left: -270 }, 500); 
}); 

Working jsFiddle =)

+0

이것은 완벽하게 작동합니다. 고맙습니다! 마우스 입력시'.stop()'이 필요한 이유를 알고 있습니까? 그렇지 않으면 @ 3nigma의 대답과 같은 "점프"가 있기 때문에 우리는 그것을 가질 필요가 있다는 것을 압니다; 그러나, 나는 그것 뒤에 이유가 확실하지 않습니다. – moey

+2

@ Siku-Siku.Com : 마우스 입력과 마우스 놓기 모두에서'.stop() '을 사용하는 이유는 마우스 위로 div를 가져 가서 멀리 옮기고 다시 빠르게 다시 올리면 분명해진다. 사용자가 기대하는 것은 "돌아서 다", 즉 그 일을 멈추고 대신 새로운 일을하는 div입니다. 그건 정확히'.stop()'이하는 일입니다. 설명을 위해 –

+0

+1! – moey

1
$("#state-slider").hover(function() { 
    $(this).animate({ 
    left: '0' 
    }, 500); 
}, function() { 
    $(this).stop(true,true).animate({ left: "-270" }, 500); 
}); 

DEMO

http://api.jquery.com/stop/

+0

감사합니다, @ 3nigma. 그러나, 마우스가'div'를 입력하고 즉시 빠져 나올 때 "점프"가 있음에 유의하십시오. 우리는 또한 마우스 입력시'.stop()'을해야한다고 생각한다. – moey

+0

아, 이제 알겠습니다 : "점프"를 방지하려면'stop (true, true) '대신'stop (true)'를 사용하십시오. – moey

0

http://jsfiddle.net/amkrtchyan/TQz5U/1/

및 jquery code

$(function() { 
    $("#state-slider").hover(function() { 
     $(this).stop(true,true).animate({ 
      left: '0' 
     }, 500); 
    }, function() { 
     $(this).stop(true,true).animate({ left: "-270" }, 500); 
    }); 
}); 
관련 문제