2 回答

TA貢獻1786條經驗 獲得超11個贊
您需要使用 CSS 位置來實現所需的結果。以下是我對您的代碼所做的修改:
.card-holder為每個添加一個包裝器.flip-container,這對于避免元素移動非常重要,因為.flip-container位置固定,因此其他元素不會移動,因為.card-holder將在那里避免移動。
<div class="card-holder">
<div class="flip-container">
<div class="flipper">
<div class="front">
<!-- front content -->
<div class="green">
</div>
</div>
<div class="back">
<!-- back content -->
<div class="blue">
</div>
</div>
</div>
</div>
</div>
將此 CSS 添加到.card-holder
.card-holder {
width: 320px;
height: 480px;
display: inline-flex;
}
并從中刪除了以下內容.flip-container, .front, .back
.flip-container, .front, .back {
width: 320px;
height: 480px;
}
在 CSS 中添加了以下動畫,在焦點動畫上,卡片將被固定,并且大小為 2 倍,在模糊時,卡片將處于初始狀態。
.focus {
animation: focus 0.4s ease-in-out forwards;
}
.blur {
animation: blur 0.4s ease-in-out forwards;
}
@keyframes focus {
to {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%) scale(2);
z-index: 5;
}
}
@keyframes blur {
from {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%) scale(2);
z-index: 5;
}
}
to {
position: relative;
top: initial;
left: initial;
transform: translate(0%, 0%) scale(1);
z-index: 0;
}
}
這是我添加的 jquery 代碼:
if((!$(this).hasClass('focus') && !$(this).hasClass('blur')) || $(this).hasClass('blur')) {
// add focus and remove blur class for initial state as well as if blur class is available
$(this).addClass('focus');
$(this).removeClass('blur');
}
else if ($(this).hasClass('focus')) {
// add blur and remove focus class if focus class is available
$(this).addClass('blur');
$(this).removeClass('focus');
}
// to stop event propagation to other elements
event.stopPropagation()
查看實際效果:https://jsfiddle.net/8jh4pwut/15/
$(document).on("click", ".flip-container", function (event) {
$(this).toggleClass('hover');
$('.front').removeClass('front');
$(this).toggleClass('zIndex');
if((!$(this).hasClass('focus') && !$(this).hasClass('blur')) || $(this).hasClass('blur')) {
$(this).addClass('focus');
$(this).removeClass('blur');
}
else if ($(this).hasClass('focus')) {
$(this).addClass('blur');
$(this).removeClass('focus');
}
event.stopPropagation()
});
.flip-container {
perspective: 1000px;
}
.flip-container.hover .flipper {
transform: rotateY(180deg);
}
body {
margin: 0;
}
.bringToFront {
width: 500px !important;
height: 500px !important;
align-content: center !important;
z-index: 1000 !important;
}
.card-holder {
width: 320px;
height: 480px;
display: inline-flex;
}
.flip-container,
.front,
.back {
display: inline-flex;
}
.flipper {
transition: 0.6s;
transform-style: preserve-3d;
position: relative;
}
.front,
.back {
backface-visibility: hidden;
position: absolute;
top: 0;
left: 0;
}
.front {
z-index: 2;
transform: rotateY(0deg);
}
.back {
transform: rotateY(180deg);
}
.green {
width: 320px;
height: 480px;
background-color: green;
}
.blue {
background-color: blue;
width: 320px;
height: 480px;
}
.focus {
animation: focus 0.4s ease-in-out forwards;
}
.blur {
animation: blur 0.4s ease-in-out forwards;
}
@keyframes focus {
to {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%) scale(2);
z-index: 5;
}
}
@keyframes blur {
from {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%) scale(2);
z-index: 5;
}
}
to {
position: relative;
top: initial;
left: initial;
transform: translate(0%, 0%) scale(1);
z-index: 0;
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
</head>
<body>
<div class="overlay">
</div>
<div style="display: flexbox; align-content: center; width: 100%; position:absolute"></div>
<div class="card-holder">
<div class="flip-container">
<div class="flipper">
<div class="front">
<!-- front content -->
<div class="green">
</div>
</div>
<div class="back">
<!-- back content -->
<div class="blue">
</div>
</div>
</div>
</div>
</div>
<div class="card-holder">
<div class="flip-container">
<div class="flipper">
<div class="front">
<!-- front content -->
<div class="green">
</div>
</div>
<div class="back">
<!-- back content -->
<div class="blue">
</div>
</div>
</div>
</div>
</div>
</body>
<script>
</script>
</html>

TA貢獻1796條經驗 獲得超10個贊
最好、最簡單的方法是使用 JavaScript。解釋位于代碼片段下方。
function hello() {
? ? document.getElementById('div').classList.add('anim');?
? ? setTimeout(function(){
? ? ? ? document.getElementById('div').classList.remove('anim');
? ? }, 1000);?
}
#div{
? ? height: 100px;
? ? width: 100px;
? ? background-color: yellow;
}
.anim {
? ? animation: anim 1s;
}
@keyframes anim {
? to {
? ? background-color: red;
? }
}
<div id="div" onclick="hello()"></div>
現在,在CSS中,我們創建了帶有一些樣式的 div,并且創建了帶有動畫樣式的單獨的 class。然后像往常一樣,我們將關鍵幀規則添加到動畫中。
然后在我們的JS中,我們有一個函數將該類添加到我們的 div 中。然后我們設置一個超時函數,它的時間指定為動畫的長度(以毫秒為單位),這將從 div 中刪除動畫類。
然后在HTML中,我們指定hello()
function 作為onclick
div 的屬性。就是這樣。
添加回答
舉報