2011-11-24 3 views
0

jQuery에서 실행 순서와 관련하여 궁금한 점이 있습니다. 아래의 코드는 설계된대로 작동하지만 모든 애니메이션과 오버플로 보호가 제거 된 후에 마지막에 추가되는 closeButton div가 애니메이션 앞에 나타납니다.jQuery 실행 순서 - 애니메이션 전에 추가 정보

이 동작의 원인은 무엇이며 어떻게 처리해야합니까?

 $('.infoRight .hoverIcon').click(
      function(){ 
       $(this).hide();//hide hover icon. Needed as it would otherwise remain visible until mouse-off 
       $(this).parent() 
        .clone(false)//create a copy of the item 
        .addClass('expandinator')//give appropriate classes to ensure appropriate styling 
        .addClass('expandinatorright') 
        .appendTo($(this).parent());//place clone in its parent. 
       $('.expandinatorright').animate({//change to colour for expanded info 
        backgroundColor: "#FFFFFF", 
        color: "#124191" 
       }, 300 , function() { 
        $('.expandinatorright').animate({//biggify 
         width: "510px" 
        }, 150, function() { 
         $('.expandinatorright').css('overflow', 'visible', function() {});//remove overflow protection 
         $('<div class="closeButton"></div>').appendTo('.expandinatorright');//add a close button 
        }); 
       }); 
      } 
     ); 
+0

- : 은 Infact는 당신이, 당신이 현재 무엇을하고 있는지와 같은 것을 쇼() 함수를 체인도 할 수 있습니다. 나는 그다지 많은 것을 얻지 못했지만 animate-callback-function을 사용하고 있습니다. 애니메이션이 끝나면 해고됩니다. 디자인에 의한 것인가? – OptimusCrime

+0

절대적으로 - 내가 원하는 것은 모든 애니메이션 및 물건이 완성되면 클래스 closeButton의 div를 배치하기위한 것이지만 콜백에서 실행되는 것처럼 보이지 않지만 애니메이션이 실행되기 전에 문제가 발생한다는 것입니다. 내가 jsfiddle에서 그것을 얻을 수 있는지 보겠지 만, 관련성이 없거나 공개적으로 볼 수있는 모든 것을 제거하는 것은 많은 작업 일 것입니다. –

답변

1

여기서 할 수있는 것은 "closeButton"클래스에 display:none 속성을 추가하는 것입니다. 애니메이션 작업이 끝나면 $ (". closeButton")과 같은 작업을 수행하십시오. 당신은 jsfiddle.net에서 작업의 예를 게시해야

$('.infoRight .hoverIcon').click(
      function(){ 
       $(this).hide();//hide hover icon. Needed as it would otherwise remain visible until mouse-off 
       $(this).parent() 
        .clone(false)//create a copy of the item 
        .addClass('expandinator')//give appropriate classes to ensure appropriate styling 
        .addClass('expandinatorright') 
        .appendTo($(this).parent());//place clone in its parent. 
       $('.expandinatorright').animate({//change to colour for expanded info 
        backgroundColor: "#FFFFFF", 
        color: "#124191" 
       }, 300 , function() { 
        $('.expandinatorright').animate({//biggify 
         width: "510px" 
        }, 150, function() { 
         $('.expandinatorright').css('overflow', 'visible', function() {});//remove overflow protection 
         $('<div class="closeButton"></div>').appendTo('.expandinatorright').show();//add a close button 
        }); 
       }); 
      } 
     ); 
+0

그것은 작동합니다! 코드를 실행하기 전에 div가 추가 된 것처럼 보이는 이유는 무엇입니까? 고마워, 그런데 :) –

+0

나는 왜 이런 일이 일어나야하는지 잘 모르겠다. $ ('. expandinatorright') 안에서도 이와 비슷한 것을 시도 할 수있다. 애니메이션 콜백 함수 : -'$ ('. expandinatorright'). append ('

')'나는이 화면을 넣지 않아도된다고 생각한다. none property – pranky64