2014-10-21 79 views
2

我的目标是拍摄三张卡片并使它们互动。用户应该能够“拾取”通过悬停启动的CSS缩放的卡片,然后使用名为“switchImg”的JavaScript函数在缩放图像时翻转图像。简单的卡片翻转和缩放

的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:

#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

<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> 

我的JavaScript代码可能是多余的(3个功能3卡做同样的事情),但主要问题是在用户放大卡并尝试翻转之后 - 图像重新缩小为它开始大小,然后重新放大。

有没有办法清理我的代码或有没有更好的方法来处理这个任务?在JSFiddle上有一个相同的例子。

回答

0

那么,问题是,当其中一个div卡被隐藏,它不会得到:hover版。你可以用jQuery动画来做到这一点,但我不知道该怎么做。我做的是我improved your switchImg() function.

0

无需使用JavaScript。这些日子你可以用CSS来完成这一切。

要正确处理hoverstate,您需要用1格包围2张图像,并使其悬停状态在您的css中处于领先位置。

使用显示:无使得无法为元素设置动画。还有一个窍门可以隐藏可方便地使用的元素。你可以使用背面知名度:隐藏 css属性给予只有1个面的元素,而不是当你旋转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> 

使用Javascript(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); 
}); 

您仍然可以通过添加透视属性来进一步试验3D效果。但这应该是你想要的。

+0

这是一个有趣的解决方案。我喜欢你如何在缩放动作中添加rotateX,但这种“翻转”需要与缩放分开进行。另外,我注意到,“A”卡的方式,其他的卡是不能轻易大部分时间徘徊。 – 2014-10-22 02:08:13

+0

我认为它看起来像一个正在走向另一个方向,因为对方的卡信件是垂直symmatrical。你可以看到A出于某种原因错误地移动了。 – Wezelkrozum 2014-10-22 16:02:50

+0

我改进了我对自己想要的东西的回答。我误解了你昨天晚上关于点击功能的第一篇文章。我也用另一种方式旋转了A卡。让我知道这张A卡的旋转看起来是否正确。我很好奇,因为在看了几分钟之后我再也看不到它们了:) – Wezelkrozum 2014-10-22 20:31:02

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与旋转Y更现实的版本,在列表中切换类。

+0

祝你好运!我会用可点击的旋转动画进一步更新我的答案。 – Wezelkrozum 2014-10-22 19:57:27