2012-05-23 4 views
2

JQuery에서이 효과를 얻을 수있는 방법이 있는지 궁금합니다. stackoverflow 사용자가 최근에 내가 가고있는 효과를 달성하는 데 도움; 이제 JQuery를 사용하여 가능한 가장 효율적인 방법으로 수행하려고합니다. 여기에 내가 달성하기 위해 찾고있는 무슨의 더 나은 설명은 바이올린에 대한 링크는 다음과 같습니다클릭 한 번; Divs가 반대 방향으로 열림

http://jsfiddle.net/itsbc/U3Lg9/11/

현재 버전은 약간 고르지 실행됩니다. 나는 이와 같은 좀 더 부드러운 무언가를 찾고 있어요 :

http://jsfiddle.net/itsbc/QchfJ/

사전에 감사, 기원전. 코멘트 섹션에서 제안 기타로

+0

왜 jQuery를 필요하지 않는 무언가에 부풀게 추가? –

+0

js에서 이미 작업하고 있다면 jQuery에서 왜 그것을하고 싶습니까? – lbstr

+0

글쎄, 만약 코드가 단순화 될 수 있다면 조금 더 부드럽게 움직일 것이라고 생각했다. 죄송합니다. 원본 게시물을 업데이트했습니다. 빠른 답변을 주셔서 감사합니다. – itsbc

답변

1

, 당신은

.. 당신은 .. 그냥 애니메이션을 밀어 경우 .. 당신은 단순히 당신이 무엇에 충실해야 성능 측면에서 자녀로 더 낫다 그러나 무엇을 진짜로 원하는 것은 slideDown animation + hide effect입니다.

#hider1 { 
    position:fixed; /* Changed style*/ 
    top: 0px;  
    background: black; 
    width:100%; 
    height:48%; 
    min-height:0px; 
    text-align:center; 
    color:white; 
} 

#hider2 { 
    background-color:black; 
    width:100%; 
    height:50%; 
    text-align:center; 
    position:fixed; /* Changed style*/ 
    bottom:0;  /* Changed style*/ 
    color:white; 
} 

JS :

$(function() { 
    $('#test').on('click', function() { 
     $('#hider1').animate({    
      height: 0, 
      opacity: 0.2 //<-- Fancy stuff 
     },1000); 

     $('#hider2').animate({    
      height: 0, 
      opacity: 0.2 //<-- Fancy stuff 
     },1000); 

    }); 
}); 
보통 slideDown 애니메이션이 작업을 얻기 위해 약간의 트릭을 할 필요가 있으므로, 아래를 참조하십시오 .. .. 요소를 보여

CSS 것입니다


DEMO -> FF 및 Chrome에서 확인되었습니다.

+0

그냥 데모를 체크 아웃하고 작동하는 동안 그것은 OP의 원시 JS 버전만큼 매끄럽지 않습니다. (OS X의 Chrome에서는 적어도) 고통에 약간의 "딸꾹질"이 있습니다. –

+0

@ChaseFlorell Firefox에서는 정상적으로 작동하지만, 크롬에서는 'top : 0'으로 시작하므로 실패합니다. 확인해야합니다. –

+0

[requestAnimationFrame]을 (를) 기다릴 수 없습니다. (http://updates.html5rocks.com/2012/05/requestAnimationFrame-API-now-with-sub-millisecond-precision) !!! – lbstr

0

jQuery를 사용하지 않으면 이미 사용하는 것보다 훨씬 더 효율적일 수 있습니다.

실제로 애니메이션을 변경하려는 이유 (예 : 애니메이션의 속도 또는 여유 등)가 애니메이션을 제어하는 ​​데 더 중요한 이유 일 수 있습니다.

http://jsfiddle.net/U3Lg9/13/

1

이 좋아, 그래서 기존의 코드를 가져다가 그것을 조금 리팩토링 : 이런 경우,이 시도. jQuery 호출은 이와 같이 간단합니다.

$("#opener").click(function() { 
    myApp.websiteOpener.displayWebsite('hider1', 'hider2'); 
}); 

그런 다음 필요한 코드가 들어있는 별도의 파일이 있습니다.

var myApp = {}; 
myApp.websiteOpener = { 

    up: null, 
    down: null, 
    topPanel: null, 
    bottomPanel: null, 

    displayWebsite: function(tPanel, bPanel) { 
     if (typeof up !== "undefined") return; 
     topPanel = tPanel; 
     bottomPanel = bPanel; 
     up = setInterval(this.goUp, 2); 
     down = setInterval(this.goDown, 2); 
    }, 

    goUp: function(x) { 
     var h1 = document.getElementById(this.topPanel); 
     if (h1.offsetHeight <= 0) { 
      clearInterval(up); 
      return; 
     } 
     h1.style.height = parseInt(h1.style.height) - 1 + "%"; 
    }, 

    goDown: function(x) { 
     var h2 = document.getElementById(this.bottomPanel); 
     if (h2.offsetHeight <= 0) { 
      clearInterval(down); 
      return; 
     } 
     h2.style.top = parseInt(h2.style.top) + 1 + "%"; 
     h2.style.height = parseInt(h2.style.height) - 1 + "%"; 
    } 
};​ 

Try it for yourself

+0

방금 ​​내 컴퓨터로 돌아 왔습니다. 이것을보고 모든 일들을 완전히 이해하려고 노력합니다. 시간을내어 주셔서 감사합니다. 돌아와 응답/응답으로 표시합니다. – itsbc

+0

하하, 다른 사람들처럼 잘 작동하는 것 같습니다. 이제는 제가 많은 도움을 얻은 것처럼 보입니다. 최선의 선택이 무엇인지 혼란 스럽습니다. 이것에 시간과 노력을 쏟아 줘서 고마워. 고맙습니다. 기원전. – itsbc

+0

문제 없습니다. 내가 한 모든 것은 원래 코드를 네임 스페이스 (청결 함)로 분리하고 모든 부 풀림을 사용하지 않고 "최소"jQuery를 사용할 수있게 해줍니다. –

관련 문제