2011-06-11 3 views
5

jover를 사용하여 호버()의 높이 변화를 애니메이션으로 나타냅니다.hover() 내의 jQuery 애니메이션은 두 번째에만 실행됩니다.

마우스를 올리면 .hover 클래스가 적용되고 클릭하면 .expanded 클래스가 토글됩니다. 적절한 애니메이션을 사용하면 대부분 효과적이지만, 처음 사용하면됩니다. 처음 마우스를 올리면 애니메이션이 완전히 건너 뜁니다.

나는 난처한 해요 - 여기에 잘못된 코드입니다 :.

$('#expandingbox').hover(

    /*on mouseenter, if not expanded, add hover class*/ 
    function() { 
    if (!$(this).hasClass("expanded")) { 
     $(this).stop(true, true).addClass("hover", "slow"); 
    }}, 

    /*on mouseout, if not expanded, remove hover class*/ 
    function() { 
    if (!$(this).hasClass("expanded")) { 
     $(this).stop(true, true).removeClass("hover", "slow"); 
    } 
}).click(function() { 
    $(this).toggleClass("expanded", "slow"); 
}); 

내가 $ ('#의 expandingbox') 트리거 ('로 마우스')를 추가하면이 문제를 해결할 것을 어딘가에 발견,하지만 그것을하지 않았다 나를 위해 일해. 그리고 여기에 문제를 재현하는 예이다 : 이 http://jsfiddle.net/Qc42v/


UPDATE : 티켓을 제출하고, 그것이의 jQuery 버그 밝혀졌습니다. 동일한 코드가 jQuery 1.5 (그리고 jQuery UI의 최신 버전)와 함께 작동합니다.

+0

[animate] (http://api.jquery.com/animate/) 사용을 고려 했습니까? – ngen

+0

@ngen 나는 단지 어떤 작품과 함께 가야한다고 생각한다. @pixelfreak가 제안한대로 animate()를 사용하고 버그를 제기 할 것이다. – joseph

답변

2

이것은 합법적 인 jQuery UI 버그 일 수 있습니다. 미리 임의의 클래스를 추가하면 나에게 그것을 고쳐주는 것처럼 보입니다. 확인 : http://jsfiddle.net/Qc42v/9/

을 그래서 기본적으로 다음과 같이 :

/*on mouseenter, if not expanded, add hover class*/ 
function() { 
if (!$(this).hasClass("expanded")) { 
    $(this).addClass("xxx"); 
    $(this).stop(true, true).addClass("hover", "slow"); 
}}, 

을이 당신을 위해 너무 안 좋아요 보인다면, 어쩌면 그냥 기본 애니메이션() 함수를 사용? 누군가는 반드시 버그를 제기해야합니다 : {

+0

나는 그것이 작동한다는 것을 믿을 수 없다! 어떻게 생각하니? 나는 버그를 제기하고 animate()를 시도 할 것입니다. 나는 결코 그것을 사용하지 않았다. 그래서 나는 그것을 배웠던 때가되었다, 나는 생각한다! 감사! – joseph

+0

그냥 개발자 본능, 내 생각 엔 :) 당신을 환영합니다! – pixelfreak