2014-03-04 4 views
0

메뉴 버튼을 클릭 할 때 전체 너비의 투명한 오버레이가 내용 위에 희미 해집니다. 내 문제는 콘텐츠를 축소 (축소)하는 CSS 변형 배율 효과를 추가했고 배율이 오버레이 페이드를 깨는 것입니다.CSS 'scale'이 jQuery 'fadeIn'을 깨고 있습니다.

$('.menu').click(function(){ 
    if(!$('.menu').hasClass('active')){ 
     $('.menu').addClass('active'); 

     $('.overlay-bg').fadeIn(); 

     $('.content').addClass('zoom'); 
     $('.content').addClass('blur'); 
    }else{ 
     $('.menu').removeClass('active'); 

     $('.overlay-bg').fadeOut(); 

     $('.content').removeClass('zoom'); 
     $('.content').removeClass('blur'); 
    } 
}); 

관련 CSS는 다음과 같습니다

.content{ 
    background-color: #fff; 
    margin: 0 auto; 
    width: 100%; 
    transition: all 1s ease; 
    -webkit-transition: all 0.5s ease; 
} 

.zoom{ 
    transform: scale(0.8); 
    -webkit-transform: scale(0.8); 
} 

http://jsfiddle.net/forxs/NAZ7D/1/

크롬 (아직 FF 나 IE에 설정되지 않은)

Safari에서 제대로 작동하려면 나타납니다,하지만

스케일을 추가 한 후 오버레이가 더 이상 페이드 인하지 않고 애니메이션 시간이 끝난 후에 표시됩니다.

혼동스럽게도 fadeOut은 정상적으로 작동합니다.

+0

나는 정확한 애니메이션을보고 있다고 생각합니다. 단지 매우 느리게 변합니다. –

+0

그건 그렇고, 귀하의 JS 코드는 단순화 : http://jsfiddle.net/promatik/NAZ7D/4/ –

답변

1

Updated Fiddle

변경은 jQuery를가로 :

$('.menu').click(function() { 
    if (!$('.menu').hasClass('active')) { 
     $('.menu').addClass('active'); 


     setTimeout(function() { 

      $('.content').addClass('zoom blur'); 

     }, 50); 

     $('.overlay-bg').fadeIn(); 
    } else { 
     $('.menu').removeClass('active'); 

     $('.overlay-bg').fadeOut(); 

     $('.content').removeClass('zoom blur'); 
    } 
}); 

여기서 중요한 부분이이 올바르게 렌더링 주문 크롬을 강제로 보이는 timeout-의 초기 전환을 포장한다.

+0

대단히 감사합니다! 왜 이것이 효과가 있는지 설명해 주시겠습니까? – Forxs

+1

jQuery의 요소 CSS 속성 (표시/불투명도)의 점진적 조작과 동시에 발생하는 전환의 브라우저 렌더링간에 충돌이있는 것으로 보입니다. 거기에 하나 또는 두 가지 것들이 있습니다 (http://www.levihackwith.com/css-transitions-cause-jquery-fadein-to-not-work/)하지만 나는 단호한 설명을 발견 havent – SW4