Это потому, что когда вы вызываете $.wrap()
, ваш исходный элемент удаляется из DOM, а затем снова добавляется. При этом его вычисляемый стиль устанавливается непосредственно на тот, который установлен классом .card-flipped
, и переходить больше нечего, поскольку для движка CSS он уже находится в этом перевернутом состоянии.
Вы можете см. этот связанный Q / A , который объясняет очень похожую ситуацию.
Таким образом, решение состоит в том, чтобы сначала обернуть ваш элемент, а затем принудительно выполнить перекомпоновку, чтобы движок CSS знал, какой текущий вычисленный стиль вашего элемента и, наконец, измените его класс, чтобы произошел переход.
$(function() {
$('.h-flipping-card').click(function(){
// first DOM manip
$(this).closest('.card-frame').wrap("<div class='h-modal-bg h-modal-bg-show'></div>");
document.body.offsetWidth; // force recalc
$(this).toggleClass('card-flipped'); // now ask for transition
});
});
$(function() {
$('.h-flipping-card').click(function(){
$(this).closest('.card-frame').wrap("<div class='h-modal-bg h-modal-bg-show'></div>");
document.body.offsetWidth;
$(this).toggleClass('card-flipped');
});
});
*, *:before, *::after {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.h-flipping-card {
position: relative;
width: 96%;
height: 0;
padding-bottom: 144%;
display: block;
margin: 0 auto;
perspective: 1000px;
}
.h-flipping-card-content {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
transform-style: preserve-3d;
transition: transform 0.8s;
}
.h-flipping-card-front, .h-flipping-card-back {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
border-radius: 18px;
box-shadow: 2px 1px 15px #8A8A8A;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
}
.h-flipping-card-front {
transform: rotateY(180deg);
}
.h-flipping-card-back {
background-color: brown;
background-size: cover;
background-repeat: no-repeat;
background-position: center;
}
.h-flipping-card-front[data-tarot-opt='demo1'] {
background-color: orange;
background-size: 130% auto;
background-repeat: no-repeat;
background-position: center;
}
.h-flipping-card.card-flipped .h-flipping-card-content {
transform: rotateY(180deg);
}
.h-modal-bg {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(33, 33, 33, 0.48);
z-index: 10000;
visibility: hidden;
display: flex;
flex-direction: column;
justify-content: center;
opacity: 0;
-webkit-transition: all 0.3s ease-out;
transition: all 0.3s ease-out;
}
.h-modal-bg-show {
visibility: visible;
opacity: 1;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
<div class="card-frame" style="max-width: 320px; width: 50%; display: inline-block;">
<div class="h-flipping-card">
<div class="h-flipping-card-content">
<div class="h-flipping-card-back"></div>
<div class="h-flipping-card-front" data-tarot-opt="demo1"></div>
</div>
</div>
</div>
</div>