2014-10-21 76 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