I'm a flip-box!
:)
Luca Manno씨는 jQuery를 이용해서 매우 흥미로운 자바스크립트 애니메이션 효과인 Flip!을 만들었습니다. 위 예제는 실행가능한 예제입니다. 직접 실행해 보세요. 저 사선은 어떻게 그려지는 것일까요? 저는 당연히 Canvas태그를 사용했으려니 했답니다. 소스를 뜯어보고 그 기발한 발상에 무릎을 쳤습니다. 보더에서 만들어지는 사선을 이용해서 만들어낸 것이었습니다. 캬~
내친 김에 Prototype과 Scriptaculous에서도 사용할 수 있도록 만들었습니다. 'Flip'이란 클래스를 만들고 Effect.Morph 메서드를 사용하여 애니메이션을 구현했습니다. 시작/끝으로 구분된 Transition 효과와 빠르기를 구분 설정하도록 하여 조금 더 세부적으로 커스토마이즈 할 수 있게 한 것이 특징입니다. 다음 예제코드를 참고하세요.
Examples :
// Flip the flipbox from bottom to top
$("flipBT").observe('click', function(){
new Flip($("flipBox"), {
direction: 'bt',
color: '#D46419',
content: '<div class="demo-one">Hello!<br/>I\'m a flip-box!<br/> :) </div>'
});
});
// Flip the flipbox from top to bottom
$("flipTB").observe('click', function(){
new Flip($("flipBox"), {
direction: 'tb',
color: '#B34212',
startSpeed: 0.6,
endSpeed: 0.4,
content: '<div class="demo-two">Hey!<br/><span style="font-size:14px">You can change me with<br/><code style="font-family:monospace;padding-left:10px">content: $("myId").innerHTML</code></span><br/><br/>Enjoy!</div>'
});
});
// Flip the flipbox from left to right
$("flipLR").observe('click', function(){
new Flip($("flipBox"), {
direction: 'lr',
color: '#341405',
content: '<div class="demo-three">I\'m simple html!</div>'
});
});
// Flip the flipbox from right to left
$("flipRL").observe('click', function(){
new Flip($("flipBox"), {
direction: 'rl',
startSpeed: 1.0,
endSpeed: 1.0,
color: '#166665',
content: '<div class="demo-four">' + $('logo').up('a').title + '<br/><span style="font-size:11px">This is a taken directly from this page<code style="display:block;color:#fff;padding:5px;font-family:monospace">$("logo").up("a").title</code></span></div>'
});
});
// Example 1
$("flipEx1").observe('click', function(){
new Flip($("flipBox"), {
direction: 'tb',
startFx: Effect.Transitions.pulse,
endFx: Prototype.Browser.IE ? Effect.Transitions.linear : Effect.Transitions.spring,
startSpeed: 0.8,
endSpeed: 0.3,
color: '#341405',
content: '<div class="demo-one">Example 1</div>'
});
});
// Example 2
$("flipEx2").observe('click', function(){
new Flip($("flipBox"), {
direction: 'bt',
startFx: Effect.Transitions.circIn,
endFx: Effect.Transitions.circOut,
color: '#341405',
content: '<div class="demo-two">Example 2</div>'
});
});
// Example 3
$("flipEx2").observe('click', function(){
new Flip($("flipBox"), {
startFx: Effect.Transitions.backIn,
endFx: Effect.Transitions.backOut,
startSpeed: 0.3,
endSpeed: 0.3,
color: '#166665',
content: '<div class="demo-three">Example 3</div>'
});
});
오래전에 보더가지고 하드코딩 하던 분들(Triangles in Javascript, 3D Renderring via CSS, DHTML Polygon Rendering Demo, CSS House)이 문득 떠오릅니다.
Downloads :
* original - flip.js (5.82kb)
* minified - flip.js (4.93kb)
Updates :
* 2008.10.15 - IE에서 발생하는 Transition 오류를 수정하였습니다.
* 2008.10.15 - 구글 크롬에서 발생하는 보더 배경색 문제를 수정하였습니다.
* 2008.10.15 - 애니메이션이 일어나는 중에 클래스를 호출하는 경우 초기화하지 않습니다.
Comments
Got something to add? You can just leave a comment.
와우~ 어찌 jQuery로 저런 것을 구현하셨는지 대단합니다.
진정한 고수입니다.
reply edit
코드도 코드지만 그 발상이 훌륭하죠!
reply edit
보더를 이용한 사선이란것이 구체적으로 보더를 어떻게 이용했다는 뜻인가요??
reply edit
http://www.uselesspickles.com/triangles/demo.html 문서를 참고하시면 이해가 빠르실 것입니다. div 엘리먼트에 색상이 서로다른 보더를 굵게 스타일링하면 사선이 생기는 모습을 보셨을 것입니다. 이 사선을 응용한 것이죠.
reply edit
이햐...........
안드로메다급 고수들이 참 많습니다.
reply edit
네 참신한 아이디어는 그리멀지 않은곳에 있는듯 합니다.
reply edit
이야.. border width를 그렇게 활용할 줄은 정말 생각 못해봤네요;; ㅎㅎ
reply edit
그러게 말예요.
reply edit
입이 딱 벌이지네요..
reply edit
네 멋지죠;
reply edit
원근감을 잘 이용했네요;;
와.. 대단하다;; 진짜 고수분들 보면 무섭다는...
reply edit
이론은 예전부터 있었지만 실제로 활용할 수 있게 한 예는 처음인것 같네요.
reply edit
참 재밌네요..^^;;
파이어준 님이 블로그를 한참동안 관리안하셔서 간만에 들어왔는데 볼만한 포스트가 참 많네요.
덕분에 기술을 쌓아갑니다.
감사합니다.ㅎ
reply edit
..
워~~ 대단하시넹..^^
자주 들려야 겠네요...
reply edit
Hi, I can't understand your language, but you did a great job converting Flip to Prototype! Thanks
reply edit
Your Reaction Time!