2014-10-21 2 views
2

내 목표는 카드의 세 이미지를 찍어서 대화 형으로 만드는 것입니다. 사용자는 호버에 의해 시작된 CSS 줌인 카드를 "픽업"한 다음 "switchImg"라고하는 javascript 기능을 사용하여 확대/축소하는 동안 이미지를 뒤집을 수 있어야합니다.간단한 카드 뒤집기 및 확대

자바 스크립트 :

function switchImg1() { 
if ($('#one').css('display') == 'none') { 
    $('#one').css('display', 'inline'); 
    $('#two').css('display', 'none'); 
} else { 
    $('#one').css('display', 'none'); 
    $('#two').css('display', 'inline'); 
} 
} 

function switchImg2() { 
if ($('#three').css('display') == 'none') { 
    $('#three').css('display', 'inline'); 
    $('#four').css('display', 'none'); 
} else { 
    $('#three').css('display', 'none'); 
    $('#four').css('display', 'inline'); 
} 
} 

function switchImg3() { 
if ($('#five').css('display') == 'none') { 
    $('#five').css('display', 'inline'); 
    $('#six').css('display', 'none'); 
} else { 
    $('#five').css('display', 'none'); 
    $('#six').css('display', 'inline'); 
} 
} 

CSS의 :

<div id="container"> 
<!-- Card One --> 
<img id="one" style="cursor:pointer; width:30%;" onclick="switchImg1()" src="https://lh4.googleusercontent.com/-mFYEpMXprYY/VEbJwkJXJaI/AAAAAAAALp4/9GduJ-BGvFk/s524/example-a.jpg" alt="A" /> 
<img id="two" style="display:none; cursor:pointer; width:30%;" onclick="switchImg1()" src="https://lh6.googleusercontent.com/-ElSRd-aC0lI/VEbJ0fwy4rI/AAAAAAAALqQ/kVli8v9s-Cw/s524/example-b.jpg" alt="B" /> 
<!-- Card Two --> 
<img id="three" style="cursor:pointer; width:30%;" onclick="switchImg2()" src="https://lh5.googleusercontent.com/-XfqG26ltMm4/VEbJ0egpaUI/AAAAAAAALqM/Q3eL6avhUJQ/s524/example-c.jpg" alt="C" /> 
<img id="four" style="display:none; cursor:pointer; width:30%;" onclick="switchImg2()" src="https://lh4.googleusercontent.com/-KieQ3h-5Lp8/VEbJ0fjArLI/AAAAAAAALqI/bYxzgCuxQxo/s524/example-d.jpg" alt="D" /> 
<!-- Card Three --> 
<img id="five" style="cursor:pointer; width:30%;" onclick="switchImg3()" src="https://lh5.googleusercontent.com/-aa_TydW4QbA/VEbKcwU_foI/AAAAAAAALqY/_fEGuyjnb5c/s524/example-e.jpg" alt="E" /> 
<img id="six" style="display:none; cursor:pointer; width:30%;" onclick="switch3Img()" src="https://lh3.googleusercontent.com/-_wQu4iMCRaY/VEbK0snmzAI/AAAAAAAALqg/d1F76OXqE7U/s524/example-f.jpg" alt="F" /> 
</div> 

내 자바 스크립트 코드는 아마 중복

#container { 
float:left; 
position:relative; 
margin:auto 0; 
width:100%; 
} 
#one, #two, #three, #four, #five, #six { 
z-index:10; 
-webkit-transition: 1s ease-in-out; 
-moz-transition: 1s ease-in-out; 
-o-transition: 1s ease-in-out; 
} 
#one:hover, #two:hover, #three:hover, #four:hover, #five:hover, #six:hover { 
transform: scale(2); 
} 

HTML (같은 일을하고 3 개 카드 3 개 기능)하지만, 주요 문제는 사용자가 카드를 확대 한 다음 뒤집으려고하면 이미지 크기가 크기를 시작한 다음 다시 확대합니다.

내 코드를 정리하는 방법이 있습니까? 아니면이 작업을 처리하는 더 좋은 방법이 있습니까? 동일한 예제가 JSFiddle에 있습니다.

답변

0

글쎄, 문제는 div 카드 중 하나가 숨겨져있을 때 :hover이 나오지 않는다는 것입니다. 아마 jQuery 애니메이션을 사용하여이 작업을 수행 할 수 있지만 방법을 잘 모르겠습니다. 내가 한 일은 그랬어. improved your switchImg() function.

0

자바 스크립트를 사용할 필요가 없습니다. 요즘에는 CSS로이 모든 작업을 수행 할 수 있습니다.

호버 스 테이트를 올바르게 처리하려면 2 개 이미지를 1 div로 묶고 CSS에서 마우스를 가리 키도록해야합니다.

표시 사용 : 없음 요소를 애니메이션화 할 수 없습니다. 자신에게 도움이되는 요소를 숨기려면 또 다른 트릭이 있습니다. backface-visibility : hidden css 속성을 사용하면 요소를 180도 회전 할 때 기본값 인 2 대신에 단지 한 면만 지정할 수 있습니다.

와 함께 변화한다 : rotateX()를 당신이 jsFiddle를 제공합니다 http://jsfiddle.net/odqvozwL/

편집 : 내가 더 내 대답을 개선했습니다. html 마크 업을 정리하고, 작은 스크립트를 추가하고, 원하는 것을 상상하고 예제에 추가했습니다. 여기에 jsFiddle은 다음과 같습니다 http://jsfiddle.net/7sp5qtmh/

CSS

#container { 
    width: 80%; 
    margin: 10% auto 0 auto; 
} 
.card { 
    width: 20%; 
    margin-right: 5%; 
    display: inline-block; 
    position: relative; 
    z-index: 1; 
    cursor: pointer; 
} 
.card > img { 
    position: absolute; 
    width: 100%; 
    -webkit-transition: .75s ease; 
    -moz-transition: .75s ease 
    -o-transition: .75 ease; 
    backface-visibility: hidden; 
    -webkit-backface-visibility: hidden; 
    -moz-backface-visibility: hidden; 
    -o-backface-visibility: hidden; 
} 
.card > img:nth-child(2) { 
    transform: rotateX(180deg); 
} 

.card.turned { 
    z-index: 2; 
} 

.card:hover { 
    z-index: 3;  
} 

/* Hover states */ 
.card:hover > img { 
    transform: scale(2); 
} 
.card:hover > img:nth-child(2) { 
    transform: scale(2) rotateX(180deg); 
} 

/* Clicked states */ 
.card.turned > img:nth-child(1) { 
    transform: scale(1) rotateX(-180deg); 
} 
.card.turned > img:nth-child(2) { 
    transform: scale(1); 
} 
.card.turned:hover > img:nth-child(1) { 
    transform: scale(2) rotateX(-180deg); 
} 
.card.turned:hover > img:nth-child(2) { 
    transform: scale(2); 
} 

HTML

<div id="container"> 
    <!-- Card One --> 
    <div class="card"> 
     <img src="https://lh4.googleusercontent.com/-mFYEpMXprYY/VEbJwkJXJaI/AAAAAAAALp4/9GduJ-BGvFk/s524/example-a.jpg" alt="A" /> 
     <img src="https://lh6.googleusercontent.com/-ElSRd-aC0lI/VEbJ0fwy4rI/AAAAAAAALqQ/kVli8v9s-Cw/s524/example-b.jpg" alt="B" /> 
    </div> 
     <!-- Card Two --> 
    <div class="card"> 
     <img src="https://lh5.googleusercontent.com/-XfqG26ltMm4/VEbJ0egpaUI/AAAAAAAALqM/Q3eL6avhUJQ/s524/example-c.jpg" alt="C" /> 
     <img src="https://lh4.googleusercontent.com/-KieQ3h-5Lp8/VEbJ0fjArLI/AAAAAAAALqI/bYxzgCuxQxo/s524/example-d.jpg" alt="D" /> 
    </div> 
    <!-- Card Three --> 
    <div class="card"> 
     <img src="https://lh5.googleusercontent.com/-aa_TydW4QbA/VEbKcwU_foI/AAAAAAAALqY/_fEGuyjnb5c/s524/example-e.jpg" alt="E" /> 
     <img src="https://lh3.googleusercontent.com/-_wQu4iMCRaY/VEbK0snmzAI/AAAAAAAALqg/d1F76OXqE7U/s524/example-f.jpg" alt="F" /> 
    </div> 
</div> 

자바 스크립트 (jQuery를)

function turn(){ 
    //Return turned cards back to their original position 
    //$('.card').removeClass('turned'); 

    //Turn this card 
    if(!$(this).hasClass('turned')){ 
     $(this).addClass('turned') 
    } else { 
     $(this).removeClass('turned') 
    } 
} 

$(document).ready(function(){ 
    console.log('ready'); 
    $('.card').click(turn); 
}); 
,536,

Perspective 속성을 추가하여 3D 효과를 추가로 실험 해 볼 수 있습니다. 그러나 이것은 당신이 원하는 것이어야합니다.

+0

이것은 흥미로운 가능한 해결책입니다. 나는 rotateX를 zoom 액션에 어떻게 추가했는지를 좋아하지만,이 "flip"은 줌과는 별도로 발생해야합니다. 또한, 나는 "A"카드가 다른 카드가없는 방식으로 대부분의 시간을 공중 선회에서 점프하고 있음을 발견합니다. –

+0

다른 카드 글자가 수직 대칭이기 때문에 A가 다른 방향으로 움직이는 것처럼 보입니다. A가 어떤 이유로 든 잘못 움직이는 것을 볼 수 있습니다. – Wezelkrozum

+0

내가 원하는 것을 생각하면 내 대답이 향상되었습니다. 지난밤 클릭 기능에 대한 첫 번째 소식을 잘못 읽었습니다. 나는 또한 A 카드를 다른 방향으로 돌렸다. A 카드의 회전이이 방법으로 올바르게 보이는지 알려주세요. 내가 몇 분을보고 나서 더 이상 차이를 실제로 볼 수 없기 때문에 나는 궁금하다. – Wezelkrozum

0

내가 함께가는 해결책은 매우 기본적인 것입니다.전면 이미지/후면 이미지간에 발생하는 간격을 줄이기 위해 전환이 제거되었습니다. 플립을 순간적으로 보이게하기 위해 이미지가 미리로드됩니다.

는 CSS

#preload { 
display: none; 
} 

#container-a { 
float:left; 
position:relative; 
margin:auto 0; 
width:100%; 
} 

#one, #two, #three, #four, #five, #six { 
z-index:10; 
} 

#one:hover, #two:hover, #three:hover, #four:hover, #five:hover, #six:hover { 
transform: scale(2); 
-webkit-transform: scale(2); 
} 

JS는

function switchImg(a,b) { 
$('#'+a).css('display', 'none'); 
$('#'+b).css('display', 'inline'); 

}

HTML

<div id="preload"> 
<img src="https://lh4.googleusercontent.com/-mFYEpMXprYY/VEbJwkJXJaI/AAAAAAAALp4/9GduJ-BGvFk/s524/example-a.jpg" width="1" height="1" alt="A" /> 
<img src="https://lh6.googleusercontent.com/-ElSRd-aC0lI/VEbJ0fwy4rI/AAAAAAAALqQ/kVli8v9s-Cw/s524/example-b.jpg" width="1" height="1" alt="B" /> 
<img src="https://lh5.googleusercontent.com/-XfqG26ltMm4/VEbJ0egpaUI/AAAAAAAALqM/Q3eL6avhUJQ/s524/example-c.jpg" width="1" height="1" alt="C" /> 
<img src="https://lh4.googleusercontent.com/-KieQ3h-5Lp8/VEbJ0fjArLI/AAAAAAAALqI/bYxzgCuxQxo/s524/example-d.jpg" width="1" height="1" alt="D" /> 
<img src="https://lh5.googleusercontent.com/-aa_TydW4QbA/VEbKcwU_foI/AAAAAAAALqY/_fEGuyjnb5c/s524/example-e.jpg" width="1" height="1" alt="E" /> 
<img src="https://lh4.googleusercontent.com/-eLsaIjwvgWU/VEYZZaKkPVI/AAAAAAAALps/9eeXxPJ55yE/s524/card-back-c.jpg" width="1" height="1" alt="F" /> 
</div> 
<div id="container-a"> 
<!-- Card One --> 
<img id="one" style="cursor:pointer; width:30%;" onclick="switchImg('one','two')" src="https://lh4.googleusercontent.com/-mFYEpMXprYY/VEbJwkJXJaI/AAAAAAAALp4/9GduJ-BGvFk/s524/example-a.jpg" alt="A" /> 
<img id="two" style="display:none; cursor:pointer; width:30%;" onclick="switchImg('two','one')" src="https://lh6.googleusercontent.com/-ElSRd-aC0lI/VEbJ0fwy4rI/AAAAAAAALqQ/kVli8v9s-Cw/s524/example-b.jpg" alt="B" /> 
<!-- Card Two --> 
<img id="three" style="cursor:pointer; width:30%;" onclick="switchImg('three','four')" src="https://lh5.googleusercontent.com/-XfqG26ltMm4/VEbJ0egpaUI/AAAAAAAALqM/Q3eL6avhUJQ/s524/example-c.jpg" alt="C" /> 
<img id="four" style="display:none; cursor:pointer; width:30%;" onclick="switchImg('four','three')" src="https://lh4.googleusercontent.com/-KieQ3h-5Lp8/VEbJ0fjArLI/AAAAAAAALqI/bYxzgCuxQxo/s524/example-d.jpg" alt="D" /> 
<!-- Card Three --> 
<img id="five" style="cursor:pointer; width:30%;" onclick="switchImg('five','six')" src="https://lh5.googleusercontent.com/-aa_TydW4QbA/VEbKcwU_foI/AAAAAAAALqY/_fEGuyjnb5c/s524/example-e.jpg" alt="E" /> 
<img id="six" style="display:none; cursor:pointer; width:30%;" onclick="switchImg('six','five')" src="https://lh3.googleusercontent.com/-_wQu4iMCRaY/VEbK0snmzAI/AAAAAAAALqg/d1F76OXqE7U/s524/example-f.jpg" alt="F" /> 
</div> 

Charly

이 짧은 프로젝트에 중요한 기여를했다. 이 버전의 작동 예제는 Fiddle입니다.

가까운 미래에 Wezelkrozum의 예제를 사용하여 rotateY를 사용하여 목록에서 클래스를 전환하는보다 현실적인 버전을 개발할 것입니다.

+0

행운을 빈다! 클릭 가능한 회전 애니메이션으로 내 대답을 추가로 업데이트하겠습니다. – Wezelkrozum

관련 문제