简单的卡片翻转和缩放
Simple Card Flip And Zoom
我的目标是拍摄三张卡片的图像,并使它们具有互动性。用户应该能够通过一个名为"switchImg"的javascript函数"拾取"一张由悬停启动的CSS缩放卡,然后在缩放时翻转图像。
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上有一个相同的例子。
问题是,当其中一个div卡被隐藏时,它不会得到:hover
。你可能可以用jQuery动画来做这件事,但我不知道如何做。我所做的是改进了你的switchImg()函数。
我采用的解决方案非常基本。去除了过渡,以停止前图像/后图像之间出现的间隙。这些图像现在正在预加载,以使翻转看起来是即时的。
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>
查理为这个简短的项目做出了重大贡献。这个版本的一个工作示例出现在Fiddle上。
在不久的将来,我将使用Wezelkrozum的例子开发一个更现实的版本,其中透视了rotateY,并在列表中切换类。
无需使用javascript。现在你可以用CSS来完成这一切。
为了正确处理悬停状态,你需要用1个div包围这两个图像,并使他的悬停状态在你的css中领先。
使用display:none将无法设置元素的动画。还有另一个隐藏元素的技巧,它对你很有用。当您将元素旋转180度时,可以使用backface visibility:hiddencss属性仅为元素提供1个面,而不是默认的2个面。
与transform: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效果。但这应该是你想要的。
- 更改高贴图的缩放级别
- 在不阻止默认行为的情况下检测IE10中的缩放
- 单击超链接时,如何使用Google Maps API v3缩放地图
- 缩放Raphael/SVG容器以适应所有内容
- 传单缩放控制位置错误
- 在不移动内部文本的情况下缩放元素的效果
- 调整缩放窗口高度提升缩放
- 计算CSS3缩放框在另一个框中的最高位置
- D3.JS向rect添加缩放和列表项
- 当我在节点上拖动鼠标时,我如何防止使用d3.ehavior.zoom().on(“缩放”,重绘)
- 将直流图表库中的折线图缩放限制为小时
- 为什么缩放按钮不会显示在照片擦除中
- 动态设置谷歌地图缩放
- 如何缩放像图像一样的元素
- 使用KineticJS变换(移动/缩放/旋转)形状
- 在手机上缩小/缩放滚动图像
- 将时间缩放添加到折线图(Chart.js)
- 当涉及css缩放时,如何获得页面上的点击位置
- 如何缩放地图框传单中的标记单击事件
- 简单的卡片翻转和缩放