Reputation: 819
I'm using jQuery Flip plugin to flip 5 cards on click (just one direction), each has a unique ID.
I have a hidden div that I want to show after all 5 cards are clicked.
This is my code (for example i'm using just two cards/divs):
<div id="card" class="card">
<div class="front">
<img src="images/front-500.png"/>
</div>
<div class="back">
<img src="images/back-1-500.png"/>
</div>
</div>
<div id="card2" class="card">
<div class="front">
<img src="images/front-500.png"/>
</div>
<div class="back">
<img src="images/back-1-500.png"/>
</div>
</div>
<div class="hidden">
<h2> hidden content</h2>
</div>
<script>
$( document ).ready(function() {
// $("#card").flip(true);
$("#card").flip({
trigger: 'manual'
});
$("#card").click(function(){
$("#card").flip(true);
});
$("#card2").flip({
trigger: 'manual'
});
$("#card2").click(function(){
$("#card2").flip(true);
});
</script>
Not sure on how to write the if all ID's clicked then show .hidden
Any help would be most appreciate.
Cheers
Upvotes: 0
Views: 91
Reputation: 4123
Take a look at my solution. I hope that it will help. After clicking, I call the function that adds the class, and check how many clicks there are. If in this case there will be 2, I show the hidden div
$(function () {
$("#card1").flip({
trigger: 'manual'
});
$("#card1").click(function () {
$("#card1").flip(true);
checkLenght($(this));
});
$("#card2").flip({
trigger: 'manual'
});
$("#card2").click(function () {
$("#card2").flip(true);
checkLenght($(this));
});
function checkLenght(thisObj) {
thisObj.toggleClass('card-flip')
let checkFive = document.querySelectorAll('.card-flip');
if (checkFive.length >= 2) {
const hiddenText = document.querySelector('#hidden-text'); hiddenText.removeAttribute('class')
}
}
});
body {
margin: 0 100px;
}
.card {
width: 100px;
height: 100px;
margin: 20px;
display: inline-block;
}
.front,
.back {
border: 2px gray solid;
padding: 10px;
}
.front {
background-color: #ccc;
}
.back {
background-color: red;
}
.hidden {
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jQuery-Flip/1.1.2/jquery.flip.js"></script>
<div id="card1" class="card">
<div class="front">
<img src="https://fakeimg.pl/100/">
</div>
<div class="back">
<img src="https://fakeimg.pl/100/">
</div>
</div>
<div id="card2" class="card">
<div class="front">
<img src="https://fakeimg.pl/100/">
</div>
<div class="back">
<img src="https://fakeimg.pl/100/">
</div>
</div>
<div id="hidden-text" class="hidden">
<h2> hidden content</h2>
</div>
Different solution
$(function () {
const cards = document.querySelectorAll('.card');
cards.forEach(card => {
$(`.${card.className}`).flip({ trigger: 'manual' })
card.addEventListener('click', function () {
$(this).flip(true);
$(this).toggleClass('card-flip')
let checkFive = document.querySelectorAll('.card-flip');
if (checkFive.length >= 2) {
const hiddenText = document.querySelector('#hidden-text'); hiddenText.removeAttribute('class')
}
})
})
})
Next solution ;)
$(function () {
const cards = document.querySelectorAll('.card');
cards.forEach(card => {
$(`.${card.className}`).flip({ trigger: 'manual' })
card.addEventListener('click', function () {
$(this).flip(true);
$(this).toggleClass('card-flip')
let checkFive = document.querySelectorAll('.card-flip');
if (checkFive.length >= 5) {
const hiddenText = document.querySelector('#hidden-text');
hiddenText.removeAttribute('class')
const winners = document.querySelectorAll('.winner');
console.log(winners)
winners.forEach(winner => {
winner.classList.add('winner-border');
})
}
})
})
})
Upvotes: 2
Reputation: 968
I have to assume that a new css class is added to the card when its flipped. just write a selector function for that class and check the length. ie
document.querySelectorAll('.flippedSelector').length >= 5 && showHiddenDiv();
Upvotes: 2